C# 包装任务返回方法有问题吗

C# 包装任务返回方法有问题吗,c#,.net,task-parallel-library,async-await,C#,.net,Task Parallel Library,Async Await,包装一个返回 Task<T> where T : ClassA Task<T> where T : IClassA 任务,其中T:ClassA 使用返回 Task<T> where T : ClassA Task<T> where T : IClassA 任务,其中T:IClassA 换句话说,将返回某类型任务的方法包装为另一个返回该类型接口任务的方法,如下所示: public new Task<ITspIdentity>

包装一个返回

Task<T> where T : ClassA
Task<T> where T : IClassA
任务,其中T:ClassA
使用返回

Task<T> where T : ClassA
Task<T> where T : IClassA
任务,其中T:IClassA
换句话说,将返回某类型任务的方法包装为另一个返回该类型接口任务的方法,如下所示:

public new Task<ITspIdentity> FindByIdAsync(string id)
{
    return new Task<ITspIdentity>(() => base.FindByIdAsync(id).Result);
}
public新任务FindByIdAsync(字符串id)
{
返回新任务(()=>base.FindByIdAsync(id.Result);
}
其中base.FindByIdAsync(id)将返回

Task<TspIdentity>.
任务。

我正在尝试通过使用接口将ASP.NET MVC应用程序表示层从对ASP.Identity的依赖中分离出来。

只要调用代码不依赖于只能通过
ClassA
使用而不能通过
IClassA
使用的成员,就不会有问题

您正在创建并返回一个
冷任务
,该任务将同步运行一个异步方法,这是一种资源浪费。您可以重构该代码,只需执行以下操作:

public new async Task<ITspIdentity> FindByIdAsync(string id)
{
   var tspIdentity = await base.FindByIdAsync(id).ConfigureAwait(false);
   return (ITspIdentity) tspIdentity;
}
public新异步任务FindByIdAsync(字符串id)
{
var tspIdentity=await base.FindByIdAsync(id).ConfigureAwait(false);
返回(ITspIdentity)tspIdentity;
}

您当前的实现正在返回一个永无止境的任务,因为您尚未启动它。哎呀,这至少是一个问题;)与其返回任务,为什么不能返回任务?我相信这会解决你的问题suppose@Srinivasan__Op可能需要任务的结果。@Srinivasan_uuuuu是的,但我只是返回一个带有对象结果的任务,然后我需要对其进行强制转换等。对于测试和一般用途来说,这不是太好。不,很遗憾,我不能这样做,因为任务!=任务事实上,他们是不同的类型。好吧,现在我们来谈谈。tyvm。不,我不担心由于返回接口而失去对类型的访问,但我关心的是转换的方式。配置等待=很好。