C#中关于async与await的使用方法-创新互联

本篇文章为大家展示了C#中关于async与await的使用方法,代码简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

创新互联专注于郎溪企业网站建设,成都响应式网站建设公司,商城网站建设。郎溪网站建设公司,为郎溪等地区提供建站服务。全流程定制开发,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

C# 5.0中引入了async 和 await。这两个关键字可以让你更方便的写出异步代码。

看个例子:

public class MyClass 
{ 
  public MyClass() 
  { 
    DisplayValue(); //这里不会阻塞 
    System.Diagnostics.Debug.WriteLine("MyClass() End."); 
  } 
  public Task GetValueAsync(double num1, double num2) 
  { 
    return Task.Run(() => 
    { 
      for (int i = 0; i < 1000000; i++) 
      { 
        num1 = num1 / num2; 
      } 
      return num1; 
    }); 
  } 
  public async void DisplayValue() 
  { 
    double result = await GetValueAsync(1234.5, 1.01);//此处会开新线程处理GetValueAsync任务,然后方法马上返回 
    //这之后的所有代码都会被封装成委托,在GetValueAsync任务完成时调用 
    System.Diagnostics.Debug.WriteLine("Value is : " + result); 
  } 
}

上面在MyClass的构造函数里调用了async关键字标记的异步方法DisplayValue(),DisplayValue()方法里执行了一个await关键字标记的异步任务GetValueAsync(),这个异步任务必须是以Task或者Task作为返回值的,而我们也看到,异步任务执行完成时实际返回的类型是void或者TResult,DisplayValue()方法里await GetValueAsync()之后的所有代码都会在异步任务完成时才会执行。

DisplayValue()方法实际执行的代码如下:

public void DisplayValue() 
{ 
  System.Runtime.CompilerServices.TaskAwaiter awaiter = GetValueAsync(1234.5, 1.01).GetAwaiter(); 
  awaiter.OnCompleted(() => 
    { 
      double result = awaiter.GetResult(); 
      System.Diagnostics.Debug.WriteLine("Value is : " + result); 
    }); 
}

可以看到,async和await关键字只是把上面的代码变得更简单易懂而已。

程序的输出如下:

MyClass() End.
Value is : 2.47032822920623E-322

以下是我写的一个静态类,可以方便将一个普通Function执行异步调用:

public static class TaskAsyncHelper 
{ 
  ///  
  /// 将一个方法function异步运行,在执行完毕时执行回调callback 
  ///  
  /// 异步方法,该方法没有参数,返回类型必须是void 
  /// 异步方法执行完毕时执行的回调方法,该方法没有参数,返回类型必须是void 
  public static async void RunAsync(Action function, Action callback) 
  { 
    Func taskFunc = () => 
    { 
      return System.Threading.Tasks.Task.Run(() => 
      { 
        function(); 
      }); 
    }; 
    await taskFunc(); 
    if (callback != null) 
      callback(); 
  } 
 
  ///  
  /// 将一个方法function异步运行,在执行完毕时执行回调callback 
  ///  
  /// 异步方法的返回类型 
  /// 异步方法,该方法没有参数,返回类型必须是TResult 
  /// 异步方法执行完毕时执行的回调方法,该方法参数为TResult,返回类型必须是void 
  public static async void RunAsync(Func function, Action callback) 
  { 
    Func> taskFunc = ()=> 
      { 
        return System.Threading.Tasks.Task.Run(()=> 
          { 
            return function(); 
          }); 
      }; 
    TResult rlt = await taskFunc(); 
    if(callback != null) 
      callback(rlt); 
  } 
}

使用很简单,将方法名作为参数传进去就行了,最常用的是把很耗时的序列化函数传进去,以免阻塞UI进程,造成卡顿现象,影响用户体验。

上述内容就是C#中关于async与await的使用方法,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联成都网站设计公司行业资讯频道。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:C#中关于async与await的使用方法-创新互联
转载来源:http://myzitong.com/article/dheiei.html