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);
}