使用async和await将同步方法包装成异步方法

Posted 三五月儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用async和await将同步方法包装成异步方法相关的知识,希望对你有一定的参考价值。

使用c#5.0引入的async和await,可以更简单的进行异步编程。本文使用async和await将同步方法包装成异步方法。

using System;
using System.Threading.Tasks;

namespace YlBCL

    public class AsyncHelper
    
        public static async void RunAsync(Action action, Action callback)
        
            await Task.Run(() =>  action(); );
            if (callback != null) callback();
        

        public static async void RunAsync<TResult>(Func<TResult> function, Action<TResult> callback)
        
            TResult tResult = await Task.Run(() =>  return function(); );
            if (callback != null) callback(tResult);
        
    

下面是使用AsyncHelper类的示例代码。

 Action action = new Action(() =>

     int s = 0;
     for (int i = 1; i < 10000; i++)
     
          s = i;
     
);

Action callback = new Action(() =>

      Console.WriteLine("success");
);
AsyncHelper.RunAsync(action , callback);

Func<string> action = new Func<string>(() => 
    int s = 0;
    for (int i = 1; i < 10000; i++)
    
          s = i;
    
    return s.ToString();
);
Action<string> callback = new Action<string>((s) =>

      Console.WriteLine(s);
 );
AsyncHelper.RunAsync(action , callback);

传入的Action实例也可以是满足委托定义的方法。

以上是关于使用async和await将同步方法包装成异步方法的主要内容,如果未能解决你的问题,请参考以下文章

Async/Await 同步方法中的异步和异步方法中的异步

async await 同步方法调用异步方法死锁

Async和Await 异步方法

C#:异步编程中的 async 和 await

swift 异步 async/await 的使用

如何使用 async/await 处理同步方法/任务