c# - 为什么即使在使用 await 之后控制台也会退出?
问题描述
using System;
using System.Threading;
using System.Threading.Tasks;
namespace application
{
public class Files
{
public static Task<string> runTask()
{
return Task.Run(() =>
{
Thread.Sleep(2000);
return "Hello World!";
});
}
public static async void Hello()
{
string result = await runTask();
Console.WriteLine(result);
Console.WriteLine("Execution Ended!");
}
public static void Main(string[] args)
{
Hello();
Console.WriteLine("The Async Code Is Running Above!");
}
};
};
上面的 C# 代码只是打印“异步代码在上面运行!” 之后什么也没有发生。
我怎样才能按以下顺序打印这些东西(以及我哪里出错了):
“异步代码在上面运行!” “你好世界!” “执行结束!”
谢谢!
解决方案
你的问题有两个要点。首先,不要Thread.Sleep
在异步方法内部使用,Task.Delay
而是使用。其次,您也可以制作Main
方法async
并返回 aTask
以获得预期的行为(可以从C# 7.1开始)
public static Task<string> runTask()
{
return Task.Run(async () =>
{
await Task.Delay(2000);
return "Hello World!";
});
}
public static async Task Hello()
{
string result = await runTask();
Console.WriteLine(result);
Console.WriteLine("Execution Ended!");
}
static async Task Main()
{
await Hello();
Console.WriteLine("The Async Code Is Running Above!");
}
推荐阅读
- react-native - 当过期不正确时,带有tipsi-stripe的createTokenWithCard不会返回错误?
- azure - LUIS 能否在多个模型之间共享实体定义?
- reactjs - 反应本机选择器,不显示在页面上
- java - Collections.sort(列表
) 不适用于 HashSet - javascript - NodeJS客户端中MongoDB中的BulkWriteError
- php - SQL 到 JSON,ORM 用于 PHP 7 和 Laravel
- ionic-framework - ionic Native DocumentViewer 在 Android 中不起作用
- java - 负载均衡器的信号问题
- javascript - 纯 JavaScript 到 jsx 问题的表单
- c++ - MFC/C++:将属性 BS_OWNERDRAW 设置为复选框按钮不起作用