Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 任务完成时如何返回数据_C#_.net - Fatal编程技术网

C# 任务完成时如何返回数据

C# 任务完成时如何返回数据,c#,.net,C#,.net,我开始做这样的工作 Task.Factory.StartNew(SomeMethod, TaskCreationOptions.LongRunning); void SomeMethod() { } 任务完成时是否有返回数据的方法 像 List SomeMethod() { List=List(); ... 返回用户列表; } 是的,就像这样。 通过使用Task.Factory.StartNew(Func函数)的泛型重载,您的任务定义了返回类型。然后使用task.Result可以访问结果

我开始做这样的工作

Task.Factory.StartNew(SomeMethod, TaskCreationOptions.LongRunning);

void SomeMethod()
{

}
任务完成时是否有返回数据的方法

List SomeMethod()
{
List=List();
...
返回用户列表;
}
是的,就像这样。
通过使用
Task.Factory.StartNew(Func函数)
的泛型重载,您的任务定义了返回类型。然后使用
task.Result
可以访问结果

Task<List<User>> task = Task.Factory.StartNew<List<User>>(SomeMethod, TaskCreationOptions.LongRunning);

RunSomeOtherMethod();         // We can do other work in parallel...

List<User> result = task.Result;  // Wait for task to finish and fetch result.
Task Task=Task.Factory.StartNew(somethod,TaskCreationOptions.LongRunning);
RunSomeOtherMethod();//我们可以同时做其他工作。。。
列表结果=任务。结果;//等待任务完成并获取结果。

List SomeMethod()
{
List=List();
...
返回用户列表;
}

如果要向函数传递一个或多个参数,请使用lambda启动函数:

Task<List<User>> task = Task.Factory.StartNew<List<User>>(
    () => SomeMethod("inputString"), //Starting the method using a lambda so you can pass in a parameter.
    TaskCreationOptions.LongRunning
);

RunSomeOtherMethod();         // We can do other work in parallel...

List<User> result = task.Result;  // Wait for task to finish and fetch result.
Task Task=Task.Factory.StartNew(
()=>SomeMethod(“inputString”),//使用lambda启动该方法,以便可以传入参数。
TaskCreationOptions.LongRunning
);
RunSomeOtherMethod();//我们可以同时做其他工作。。。
列表结果=任务。结果;//等待任务完成并获取结果。

List方法(字符串输入)
{
List=List();
...
返回用户列表;
}
有关线程和任务并行性的更多信息,我想让您参考在线电子书:

您必须使用
Task
而不是
Task

List<User> SomeMethod()
{
  List<User> = List<User>();
   ...
   return userList;
}

var task = Task<List<User>>.Factory.StartNew(SomeMethod, TaskCreationOptions.LongRunning);
List SomeMethod()
{
List=List();
...
返回用户列表;
}
var task=task.Factory.StartNew(SomeMethod,TaskCreationOptions.LongRunning);
然后您可以通过调用task.result来获得结果

此外,您还可以使用continuation task,它将在result by available之后被调用。

在C#v7中,Hamlet Hakobyan和SynerCoder提供的语法不是严格必需的,因为.StartNew()的返回值是根据SomeMethod参数自动推断的

List<User> SomeMethod()
{
    List<User> userList = new List<User>();
    return userList;
}
async Task DoWork()
{
    List<User> users = await Task.Factory.StartNew(SomeMethod, TaskCreationOptions.LongRunning);
} 
List SomeMethod()
{
List userList=新列表();
返回用户列表;
}
异步任务DoWork()
{
List users=wait Task.Factory.StartNew(somethod,TaskCreationOptions.longlunning);
} 

当我使用SomeMethod(string“someString”)时,我遇到了一些异常。您能建议一下它是否有特殊语法吗?@Peretz我添加了另一个示例,以便您可以将参数传递给该方法。
List<User> SomeMethod(string input)
{
  List<User> = List<User>();
   ...
   return userList;
}
List<User> SomeMethod()
{
  List<User> = List<User>();
   ...
   return userList;
}

var task = Task<List<User>>.Factory.StartNew(SomeMethod, TaskCreationOptions.LongRunning);
List<User> SomeMethod()
{
    List<User> userList = new List<User>();
    return userList;
}
async Task DoWork()
{
    List<User> users = await Task.Factory.StartNew(SomeMethod, TaskCreationOptions.LongRunning);
}