Asynchronous C#
本问题已经有最佳答案,请猛点这里访问。
我有一个关于两个关键字的问题(异步和等待)他们的主要目标是使多个方法在我理解的同时完成,因此,例如,如果我要做一个长任务,这将阻止在这种情况下执行主任务,我必须使用(异步和等待)。
但当我在两个执行相同操作的不同程序中尝试时,我发现使用(async和wait)执行的是相同的w/o。
第一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Async { public Async() { main(); } public async void main() { Console.WriteLine("Main Thread...."); await SlowTask(); Console.WriteLine("Back To Main Thread"); } public async Task SlowTask() { Console.WriteLine("Useless Thread...."); for (int i = 0; i < 1000000; i++) { // TODO } Console.WriteLine("Finished Useless Thread...."); } } |
第二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class NoAsync { public NoAsync() { main(); } public void main() { Console.WriteLine("Main Thread...."); SlowTask(); Console.WriteLine("Back To Main Thread"); } public void SlowTask() { Console.WriteLine("Useless Thread...."); for (int i = 0; i < 1000000; i++) { // TODO } Console.WriteLine("Finished Useless Thread...."); } } |
两者的执行是完全相同的,据我所知,当使用(async和await)时,main和slowtask将同时执行,而不等待一个结束,这样另一个开始执行,但不会发生这种情况。
我犯了什么错误,或者我没有理解C中的异步?亲切的问候。
我希望两人的处决是一样的。问题是后者,您对C中的异步有误解。
简言之,当你在
例如,当您进行I/O并希望同时有一个线程可用于字段HTTP请求时,这很方便。关于这方面的阅读材料已经很多了。下面是一个更深入的答案
执行应该完全相同,它们是逻辑上一致的程序。考虑到整个程序只是增加一个计数器变量,可能甚至没有一个任务切换。