在C#中的控制台应用程序异步?

我有这个简单的代码:

public static async Task<int> SumTwoOperationsAsync()

{

var firstTask = GetOperationOneAsync();

var secondTask = GetOperationTwoAsync();

return await firstTask + await secondTask;

}

private async Task<int> GetOperationOneAsync()

{

await Task.Delay(500); // Just to simulate an operation taking time

return 10;

}

private async Task<int> GetOperationTwoAsync()

{

await Task.Delay(100); // Just to simulate an operation taking time

return 5;

}

大。这样编译。

但可以说我有一个控制台应用程序,我想运行上面的代码(调用SumTwoOperationsAsync()

 static  void Main(string[] args)

{

SumTwoOperationsAsync();

}

但我读过,(使用时sync)我对所有同步的方式 和 :

:这是否意味着我的Main功能应标记为async

嗯, 是因为存在编译错误:

入口点不能用’async’修饰符标记

如果我理解异步的东西,线程将进入Main函数---->

SumTwoOperationsAsync-—>将调用这两个函数,并且将退出。但直到SumTwoOperationsAsync

我想念什么?

回答:

在大多数项目类型中,async“向上”和“向下”将在async void事件处理程序处结束或将a返回Task到框架。

但是,控制台应用程序不支持此功能。

您可以只Wait对返回的任务执行:

static void Main()

{

MainAsync().Wait();

// or, if you want to avoid exceptions being wrapped into AggregateException:

// MainAsync().GetAwaiter().GetResult();

}

static async Task MainAsync()

{

...

}

或者您也可以像我写的那样使用自己的上下文:

static void Main()

{

AsyncContext.Run(() => MainAsync());

}

static async Task MainAsync()

{

...

}

有关async控制台应用程序的更多信息,请访问我的博客。

以上是 在C#中的控制台应用程序异步? 的全部内容, 来源链接: utcz.com/qa/398663.html

回到顶部