class 库中异步等待的通用方法

Generic Methods for async await in a class Library

是否可以在 Dot Net 4.0 class 库中编写通用异步方法?

问这个的原因
因为这样我就可以在任何以 .Net 4.0 为目标的项目中使用这个 dll。甚至在不支持 await 和 async 关键字的 IDE 之类的 VS 2010 中使用。

问题
我的问题是我的主要应用程序代码在 .Net 4.0 中,我使用 VS 2010。我想我将使用 VS 2012 创建一个通用 dll,我可以在我的主要代码中引用并使用它。

在我的应用程序中,有些代码需要时间并在 UI 线程中触发,导致我的应用程序挂起。如果我能达到我想要的,那么那些同步调用就不会挂了UI.

像这样

public static class AsyncHelpers
{
    public static async Task<T> RunMethodAsync<T>()
    {
        //What to do here?
    }
}

您可以在面向 .NET 4.0 的项目中使用 async/await;您只需要引用 Microsoft.Bcl.Async NuGet 包,它提供了必要的类型。当然,您还需要 C# 5(或更高版本)编译器,这意味着 VS2012 或更新版本。

我做到了。这是我所做的。

如果您通过 Nuget 包管理器控制台使用 .Net 4.0,请安装 Microsoft BCL Async。然后使用此代码

using System.Threading.Tasks;

namespace AsyncAwaitCL
{
    public class AsyncHelpers
    {
        public static async Task<T> RunMethodAsync<T>(Task<T> task)
        {
            T returnValue = default(T);
            returnValue = await task;
            return returnValue;
        }
    }
}

大功告成。