当前位置: 首页 > 编程语言 > C#

async和await不起作用share

时间:2023-04-10 16:48:54 C#

async和await不起作用我正在尝试学习.NET4.5的async和await功能。首先,这是我的代码staticasyncvoidMethod(){awaitTask.Run(newAction(DoSomeProcess));Console.WriteLine("所有方法都执行完毕");}staticvoidDoSomeProcess(){System.Threading。线程.睡眠(3000);}staticvoidMain(string[]args){方法();//Console.WriteLine("方法开始");控制台.ReadKey();这段代码不会给我任何结果。我不懂为什么。我的意思不是任务假设只是未阻塞的线程。但是,如果我在主要方法中取消注释Console.WriteLine(),一切似乎都正常。谁能告诉我这是怎么回事?使用async/await模式,有些事情与以前的线程不同。您不应该使用System.Threading.Thread.Sleep,因为它仍然处于阻塞状态并且不能异步使用。而是使用Task.Delay考虑让所有代码异步。由于避免了asyncvoid方法,因此无法同步控制台中的Main方法。基本上asyncvoid仅适用于无法返回某些内容的事件处理程序。所有其他异步方法应返回Task或TaskModified您的示例:staticasyncTaskMethod(){awaitDoSomeProcess();Console.WriteLine("所有方法都执行完毕");}staticasyncTaskDoSomeProcess(){awaitTask.Delay(3000);现在更改Main方法,因为这应该是您开始任务的地方Task.Run(()=>Method()).Wait();//Console.WriteLine("方法开始");控制台.ReadKey();学习如何正确使用async和await关键字的学习曲线很小。问题是没有人等待谁等待,以及一些其他细节,如SyncronizationContext和Task:您应该查看一些文章:http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx以在控制台中使用async和await关键字,您需要一个额外的代码:无法在控制台应用程序的“Main”方法上指定“async”修饰符或等待单元测试的AsyncVoid方法调用或UnitTestExplorerdoesn'tshowmetroappsI程序的异步单元测试通常使用这种方法:以上就是C#学习教程的全部内容:async和await不行。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注—staticvoidMain(string[]args){Console.WriteLine("HELLOWORLD");vart1=Task.Factory.StartNew(newFunc(async()=>awaitMethod())).Unwrap();安慰。WriteLine("开始");t1.等待();Console.WriteLine("完成");控制台.ReadKey();}staticasyncTaskMethod(){//此方法使用async/await关键字非常安全Console.WriteLine("BEFOREDELAY");等待任务。延迟(1000);Console.WriteLine("延迟后");}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: