在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