我试图在使用VS2012框架4.5的表单上使用async和await命令。我的异步方法SlowMethodAsync不会返回任何内容。请注意,这段代码在控制台应用程序中可以正常工作。
private void button1_Click(object sender, EventArgs e)
{
var task = SlowMethodAsync();
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
System.Threading.Tasks.TaskStatus status = task.Status;
Console.WriteLine("Slow method result on Thread: {0}", task.Result); //This line never executes
Console.WriteLine("Main complete on {0}", Thread.CurrentThread.ManagedThreadId);
}
//Why is this method not returning anything?
static async Task<int> SlowMethodAsync()
{
Console.WriteLine("Slow method started on Thread: {0}", Thread.CurrentThread.ManagedThreadId);
await Task.Delay(2000);
Console.WriteLine("Slow method complete on Thread: {0}", Thread.CurrentThread.ManagedThreadId);
return 42;
}
async
FAQ和async
介绍文章中都有很好的文档。特别是死锁场景,最早在2011年1月(在MSDN博客上)被明确记录下来,在Channel9上演示了两次,在MSDN杂志上发表,并且仍然在SO和MSDN论坛上反复提问和回答。不确定还能在哪里或如何记录... - Stephen Cleary