使用async和wait进行异步编程

本文来源于博客园,转载请注明出处

代码示例

// 要让一个方法成为异步方法:  
//  - async修饰符.   
//  - 返回类型是 Task 或者 Task<T>. 具体来说,如果函数没有return具体的值,则返回类型是Task,否则是Task<T>
//    这里 AccessTheWebAsync返回了整数,所以它的返回类型是Task<int>
//  - 方法名后缀 "Async",显然这是一个约定
async Task<int> AccessTheWebAsync()  
{   
    HttpClient client = new HttpClient();  
  
    // GetStringAsync 返回Task<string>. 这意味着如果你await该task,你将获利一个string 
    Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");  
  
    // 这里可以做一些不依赖getStringTask返回值的工作
    DoIndependentWork();  
  
    // await会挂起AccessTheWebAsync的执行线程,getStringTask执行完毕,AccessTheWebAsync 才能继续执行
    string urlContents = await getStringTask;  
  
    // 等待 AccessTheWebAsync 的方法会获取一个长度值 
    return urlContents.Length;  
}  

这段代码来自MSDN,可以看到作为异步方法的AccessTheWebAsync也调用了异步方法GetStringAsync。
另外要注意:对异步的方法await调用只能在异步方法中,比如下边的代码在编译期间就会报错

class Program
    {
        static void Main(string[] args)
        {
            var t = AccessTheWebAsync();
            string ret=await t;
        }

        async static Task<string> AccessTheWebAsync()
        {
            HttpClient client = new HttpClient();  
            Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
            string urlContents = await getStringTask;
            System.Console.WriteLine("Caller done");
            return urlContents;
        }
    }

正确的调用方式如下

static void Main(string[] args)
{
    var t = AccessTheWebAsync();
    t.Wait();
    string r=t.Result;
}

本文来源于博客园,转载请注明出处

转载于:https://www.cnblogs.com/qzhforthelife/p/6744423.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值