如何运行异步使用“异步任务”关键字的方法
本文关键字:异步 异步任务 任务 关键字 方法 何运行 运行 | 更新日期: 2023-09-27 17:53:49
我想我可以在调用它后异步运行使用"异步任务"方法的方法,但它被阻止了,实际上它是同步运行的,请参阅我的代码如下所示。
static void Main(string[] args)
{
asyncTest();// use asyncTest.Wait() help nothing.
Console.ReadKey();
}
static async Task asyncTest()
{
Console.WriteLine("before init task second " + DateTime.Now.Second);
var t1 = getInt1S();// I supposed it to run background,but it blocked
var t3 = getInt3S();
//var await1 = await t1;//this line just no use, run quickly
//var await3 = await t3;//this line just no use, run quickly
Console.WriteLine("after init task second " + DateTime.Now.Second);
}
static async Task<int> getInt1S()
{
Console.WriteLine("getInt1S" + DateTime.Now.Second);
Task.Delay(1000).Wait();
return 1;
}
static async Task<int> getInt3S()
{
Console.WriteLine("getInt3S" + DateTime.Now.Second);
Thread.Sleep(3000);
return 3;
}
输出如下:
before init task second 21
getInt1S 21
getInt3S 22
after init task second 25
为什么'getInt1S(('和'await getInt3S(('都同步运行?有没有办法像这样编码:
var a = methodSync();//method define like: async Task<T> methodSync()
Console.Write("");//do something during processing the methodSync
T b = await a;
我不会了解如何在 ConsoleApp 中使用"async methodSync((",只是如何让我的"t1"和"t2"在"asyncTest(("中异步运行。
我正在研究异步/等待,所以我想找到一些不同于 ' var a = new Task(((=>{return 1;}('
调用 asyncTest(( 的方式重要吗?还是我错过了什么?
有谁可以帮助我?或者指出我的错误。
谢谢。
所有异步方法都同步运行,直到第一条await
指令。
然后,如果可等待的(await
等待的内容(完成,它将继续同步运行,直到下一条await
指令或方法结束。
一旦达到未完成的可等待,控件将返回到调用方法,返回一个Task
,当异步方法中的所有 awaitable 完成并到达方法的末尾时,该将完成。
此编译器功能的目的是轻松生成按顺序(非同步(运行的代码,从而生成您所看到的内容。