【发布时间】:2016-02-14 09:46:49
【问题描述】:
下面的代码是我想要做的简化版本。代码应该很快到达 Console.ReadKey() 行,但它永远不会发生。 Task.WhenAll 永远不会恢复下一行。代码有什么问题?
class Program
{
static void Main(string[] args)
{
DoWorkAsync().Wait();
Console.ReadKey();
}
static async Task DoWorkAsync()
{
var block = new ActionBlock<Job>(async (task) =>
{
await task.DoAsync();
});
var jobs = Enumerable.Range(0, 2).Select(i => new Job());
foreach (var job in jobs)
{
await block.SendAsync(job);
}
await Task.WhenAll(jobs.Select(c => c.Completion));
}
public class Job
{
TaskCompletionSource<bool> completionSource = new TaskCompletionSource<bool>();
public Task<bool> Completion { get { return completionSource.Task; } }
public async Task DoAsync()
{
await Task.Delay(100);
completionSource.SetResult(true);
}
}
【问题讨论】:
标签: c# async-await task tpl-dataflow