我有一个使用不同参数运行n次的方法,简化:
foreach(var param in params)
ValueList.Add(SomeMethod(param));
我想这样做:
foreach(var param in params)
TaskList.Add(SomeMethodAsync(param));
foreach(var task in TaskList)
ValueList.Add(await task);
async Task<SomeValue> SomeMethodAsync(SomeParam p)
{
//What to do here
//To make this call async
return SomeMethod(p);
}
如何修改当前方法以应用异步功能? SomeMethod
不使用任何提供异步的框架函数;它是完全同步的。
用不同的词来形容它:我想要使用新的async / await关键字异步/同时运行此方法的n个任务。
答案 0 :(得分:2)
如果你的方法没有返回异步结果,那么使用async / await就没有意义了。
如果您只想并行运行方法,请使用Parallel.ForEach
Parallel.ForEach(params, param => ValueList.Add(SomeMethod(param)));
如果SomeMethod不使用任务,或者等待任何框架异步调用,那么它将在单个线程上运行,无论您是否向方法定义添加异步。
在这种情况下,您最好的选择是在任务中运行SomeMethod。
async Task<SomeValue> SomeMethodAsync(SomeParam p)
{
return await Task.Run<SomeValue>(() => SomeMethod(p));
}
我个人认为Parallel.ForEach更清楚。
答案 1 :(得分:1)
让它成为一个返回任务的函数。
Task<SomeValue> SomeMethodAsync(SomePAram p)
{
return Task<SomeValue>.Run(()=> SomeMethod());
}
SomeMethodAsync
现在是awaitable
。