我有这个控制台应用程序,我的应用程序的缩减示例,但它允许重现行为.
class Program { static void Main(string[] args) { try { Console.WriteLine("Start"); addAsync01(1, 2); } catch { } finally { Console.WriteLine("Finally"); Console.ReadKey(); } addAsync01(1,2); } private static async void addAsync01(int sum1, int sum2) { int result = await AddAsync(sum1, sum2); Console.WriteLine("El resultado de sumar 1 y 2 es: " + result); } public static async TaskAddAsync(int num1, int num2) { return await Task .Run(() => { return num1 + num2; }); } }
在该addSyn01
方法中,我使用了await关键字,但是应用程序不会等到方法AddAsync
完成,继续运行,因此我在控制台中获得的结果是:
Start Finally El resultado de sumar 1 y 2 es: 3
我期待这个:
Start El resultado de sumar 1 y 2 es: 3 Finally
如果我没有错,方法完成的await
关键字等待async
继续下一行代码.
如果我在AddAsync01
方法中使用此代码,它可以正常工作:
private static async void addAsync01(int sum1, int sum2) { TasktskResult = AddAsync(1, 2); await Task.WhenAll(tskResult); Console.WriteLine("El resultado de sumar 1 y 2 es: " + tskResult.Result); }
David Pine.. 12
控制台应用程序不支持应用程序async / await
的入口点,正如您可能期望的那样.您需要调用.Wait()
或(.Result
对于Task
返回方法).我建议您查看Stephen Cleary的异步控制台程序,如果您对它为何无法正常工作感到好奇.
class Program { static void Main(string[] args) { try { Console.WriteLine("Start"); addAsync01(1, 2).Wait(); } catch { //TODO } finally { Console.WriteLine("Finally"); Console.ReadKey(); } addAsync01(1, 2).Wait(); } static async Task addAsync01(int sum1, int sum2) { int result = await AddAsync(sum1, sum2); Console.WriteLine("El resultado de sumar 1 y 2 es: " + result); } public static async TaskAddAsync(int num1, int num2) { return await Task.Run(() => num1 + num2); } }
此外,您需要返回Task
该addAsync01
方法.
以下是带有更改的输出:
Start El resultado de sumar 1 y 2 es: 3 Finally
虽然这种改变确实可以正常回答你的问题,但我很奇怪你想要引入异步代码而没有明显的原因.如果你只是想了解它是如何运作的,那很好; 但是,如果这是理想的代码,您可能需要重新考虑该方法.两者的总和在int's
计算上并不昂贵,并且这可以以更快的速度和更少的开销同步完成.
控制台应用程序不支持应用程序async / await
的入口点,正如您可能期望的那样.您需要调用.Wait()
或(.Result
对于Task
返回方法).我建议您查看Stephen Cleary的异步控制台程序,如果您对它为何无法正常工作感到好奇.
class Program { static void Main(string[] args) { try { Console.WriteLine("Start"); addAsync01(1, 2).Wait(); } catch { //TODO } finally { Console.WriteLine("Finally"); Console.ReadKey(); } addAsync01(1, 2).Wait(); } static async Task addAsync01(int sum1, int sum2) { int result = await AddAsync(sum1, sum2); Console.WriteLine("El resultado de sumar 1 y 2 es: " + result); } public static async TaskAddAsync(int num1, int num2) { return await Task.Run(() => num1 + num2); } }
此外,您需要返回Task
该addAsync01
方法.
以下是带有更改的输出:
Start El resultado de sumar 1 y 2 es: 3 Finally
虽然这种改变确实可以正常回答你的问题,但我很奇怪你想要引入异步代码而没有明显的原因.如果你只是想了解它是如何运作的,那很好; 但是,如果这是理想的代码,您可能需要重新考虑该方法.两者的总和在int's
计算上并不昂贵,并且这可以以更快的速度和更少的开销同步完成.