Win*_*der 1 .net c# asynchronous async-await
我正在尝试学习异步和等待.NET 4.5的功能.首先,这是我的代码
static async void Method()
{
await Task.Run(new Action(DoSomeProcess));
Console.WriteLine("All Methods have been executed");
}
static void DoSomeProcess()
{
System.Threading.Thread.Sleep(3000);
}
static void Main(string[] args)
{
Method();
//Console.WriteLine("Method Started");
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
此代码不会在控制台上给我任何结果.我不明白为什么.我的意思是不是任务假设只是没有阻塞的线程.但是,如果我在main方法中取消注释Console.WriteLine(),一切似乎都正常.
谁能告诉我这里发生了什么?
使用async/await模式,有些东西与先前的线程不同.
你不应该使用,System.Threading.Thread.Sleep
因为它仍然是阻塞的,不能用于异步.而是使用Task.Delay
考虑使所有代码异步.只有控制台中的Main方法不能同步原因
避免async void方法.基本上async void仅适用于无法返回某些内容的事件处理程序.所有其他异步方法应该返回Task或Task<T>
修改了你的例子:
static async Task Method()
{
await DoSomeProcess();
Console.WriteLine("All Methods have been executed");
}
static async Task DoSomeProcess()
{
await Task.Delay(3000);
}
Run Code Online (Sandbox Code Playgroud)
现在更改Main方法,因为这应该是您开始任务的地方
Task.Run(() => Method()).Wait();
//Console.WriteLine("Method Started");
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16122 次 |
| 最近记录: |