我有以下代码:
Task.Factory.ContinueWhenAll(items.Select(p =>
{
return CreateItem(p);
}).ToArray(), completedTasks => { Console.WriteLine("completed"); });
是否可以将 ContinueWhenAll
转换为同步方法?我想在异步和同步之间切换回来。
编辑:我应该注意到 continuewhenall 方法中的每个“任务”都应该同步执行。
最佳答案
如果您想完整保留现有代码并有同步执行的可变选项,您应该进行以下更改:
bool isAsync = false; // some flag to check for async operation
var batch = Task.Factory.ContinueWhenAll(items.Select(p =>
{
return CreateItem(p);
}).ToArray(), completedTasks => { Console.WriteLine("completed"); });
if (!isAsync)
batch.Wait();
这样您就可以通过编程方式切换它,而不是通过编辑您的源代码。您可以使两种方法的延续代码保持相同。
编辑:
这是一个简单的模式,用于将相同的方法表示为同步和异步版本:
public Item CreateItem(string name)
{
return new Item(name);
}
public Task<Item> CreateItemAsync(string name)
{
return Task.Factory.StartNew(() => CreateItem(name));
}
关于c# - 将异步任务切换为同步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19456900/