[英]Extract type ICollection<> from return type Task<ICollection<>>
我使用以下方法从数据库中获取一些数据:
public async Task<ICollection<Medikation>> GetMedikamentTask(string dbId)
{
var medikamentSet = await _medikationApiService.GetMedikationSet(selector, dbId);
var responsefiltered = medikamentSet.Results.Where(c => c.Result != null).ToList();
return responsefiltered[0].Result.Medikation;
}
responsefiltered 是类型 List<>,但由于我必须使用 async/await,所以我的返回类型应该包含在 Task<> 中。 问题是,在下面的 GetMedikament 方法中,我使用了 taskLists.Any 或 OrderByDescending 之类的方法,所以我必须成为 ICollection 作为答案。
public WebhookResponse GetMedikament(WebhookRequest request, string dbId, int? mediId = null)
{
var taskLists = GetMedikamentTask(dbId);
cut code....
}
我尝试不使用异步方法,并调用了.Result,但这不是解决此问题的正确方法。 有人有想法吗?
通常,如果您在另一个方法中使用async
方法,则第二种方法也将变为async
,因此请考虑将您的GetMedikament
方法更改为:
public async Task<WebhookResponse> GetMedikament(WebhookRequest request, string dbId, int? mediId = null)
{
var taskLists = await GetMedikamentTask(dbId);
// do stuff
}
如果您不想这样做或不能这样做,那么有一个免责声明:尝试欺骗await/async
是有风险的,因为您的应用程序可能会遇到死锁(线程可能会卡住并且应用程序可能会冻结)。
如果您必须这样做,您仍然可以尝试这样做,并且有完整的文章介绍如何这样做,但仍然存在一些风险和/或妥协。
在您的情况下, 线程池破解(将工作偏移到不同的线程)似乎足够合适且足够安全。 这不会导致死锁,但是您不能修改 function 内部的 UI(这不会是问题)。
function 看起来像这样:
public WebhookResponse GetMedikament(WebhookRequest request, string dbId, int? mediId = null)
{
var taskLists = Task.Run(() => GetMedikamentTask(dbId)).GetAwaiter().GetResult();
// do stuff
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.