我想做这样的事情:
public async Task MyMethod()
{
// Do some preparation
await Parallel.ForEachAsync(0, count, i => { // Do some work //});
// do some finalization
}然而,我并没有找到一种优雅的方法。我想到了两种方法,但它们不是最优的:
Task.Factory.StartNew(() => Parallel.For(...));。
问题是它在异步任务上“浪费”了一个线程。发布于 2016-09-03 12:48:26
您有一个常规的同步并行循环,您希望异步调用它(大概是为了将它从UI线程中移开)。
您可以用将任何其他CPU绑定的工作移出UI线程的方式进行:使用Task.Run。
public async Task MyMethod()
{
// Do some preparation
await Task.Run(() => Parallel.ForEach(0, count, i => { /* Do some work */ }));
// do some finalization
}没有线程“浪费”,因为Parallel.ForEach将调用线程作为其工作线程之一。
(这是我的书中的配方7.4“并行代码的异步包装器”)。
https://stackoverflow.com/questions/39297214
复制相似问题