包装任务返回方法的任何问题

时间:2014-06-04 12:12:54

标签: c# .net task-parallel-library async-await

通过包装返回

的方法,我可能遇到任何问题
Task<T> where T : ClassA

使用返回

的方法
Task<T> where T : IClassA

换句话说,使用另一个方法包装一个返回某种类型的Task的方法,该方法返回该类型接口的Task,如下所示:

public new Task<ITspIdentity> FindByIdAsync(string id)
{
    return new Task<ITspIdentity>(() => base.FindByIdAsync(id).Result);
}

其中base.FindByIdAsync(id)将返回

Task<TspIdentity>.

我正在尝试通过使用接口将ASP.NET MVC应用程序表示层与ASP.Identity的依赖关系解耦。

1 个答案:

答案 0 :(得分:5)

只要调用代码不依赖于仅通过ClassA而无法通过IClassA提供的成员,就不应该存在问题。

您正在创建并返回Cold Task,它将同步运行异步方法,这会浪费资源。您可以重构该代码并执行:

public new async Task<ITspIdentity> FindByIdAsync(string id)
{
   var tspIdentity = await base.FindByIdAsync(id).ConfigureAwait(false);
   return (ITspIdentity) tspIdentity;
}