您的位置:首页 > 编程语言 > C#

C#异步Async、Task、Await

2017-03-02 16:39 1091 查看

参考https://www.geek-share.com/detail/2604201440.html

事例:

static void Main(string[] args)
{
for (int i = 0; i < 4; i++)
{
TestAsync();
}

Console.ReadLine();
}

static async Task TestAsync()
{
Console.WriteLine("Test()开始, Thread Id: {0}\r\n", Thread.CurrentThread.ManagedThreadId);
var name = GetNameAsync();   //我们这里没有用 await,所以下面的代码可以继续执行
// 但是如果上面是 await GetNameAsync(),下面的代码就不会立即执行,输出结果就不一样了。
var res = await name;
//
Console.WriteLine("await GetName1: {0},得到结果进行其它操作", res );
Console.WriteLine("Test()结束.\r\n");
}

static async Task<string> GetNameAsync()
{
// 这里还是主线程
Console.WriteLine("GetName()开始, thread Id is: {0}", Thread.CurrentThread.ManagedThreadId);
return await Task.Run(() =>
{
Thread.Sleep(1000);
Console.WriteLine("'GetName' Thread Id: {0}", Thread.CurrentThread.ManagedThreadId);
return "Jesse";
});
}

、、、、

static async Task Test(){
Task<string> task = Task.Run(() =>{
Console.WriteLine("另一个线程在运行!");  // 这句话只会被执行一次
Thread.Sleep(2000);
return "Hello World";
});

// 这里主线程会挂起等待,直到task执行完毕我们拿到返回结果
var result = task.GetAwaiter().GetResult();
// 这里不会挂起等待,因为task已经执行完了,我们可以直接拿到结果
var result2 = await task;
Console.WriteLine(str);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: