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

编程入门 行业动态 更新时间:2024-10-28 08:24:14
本文介绍了在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事件处理程序或向框架返回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() { ... }

或者您可以use your own context like the one I wrote:

static void Main() { AsyncContext.Run(() => MainAsync()); } static async Task MainAsync() { ... }

有关async控制台应用程序的详细信息,请参阅on my blog。

更多推荐

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

本文发布于:2023-11-10 06:50:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1574653.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:控制台   应用程序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!