[英]Synchronous base method with async override
我有一個基類,其子類可能希望異步實現方法。 我已經實現如下,但是Visual Studio建議使基GetEntityName
同步,因為它不會await
任何東西。 但是,這會使孩子受傷。
有沒有更好的辦法?
public abstract class BaseHandler
{
protected virtual async Task<string> GetEntityName(object entity)
{
return string.Empty;
}
}
public class ChilldHandler: BaseHandler
{
protected override async Task<string> GetEntityName(object entity)
{
return await LongRunningService.DoSomething(entity);
}
}
public abstract class BaseHandler
{
protected virtual Task<string> GetEntityName(object entity)
{
return Task.FromResult(string.Empty);
}
}
由於您的方法無法執行等待的任何操作,因此可以使用Task.FromResult
方法返回已完成的Task。
您不需要等待GetEntityName
內的任何內容,因為不會等待任何不完整的Task。
async
是它出現的特定方法的實現細節 。 無論出現在何處,它都不構成方法簽名的一部分。 (這也是為什么不允許在接口1中進行async
原因-因為它們沒有實現,並且不屬於方法簽名)。
也就是說,任何虛擬Task
返回方法都override
在不使用/不使用async
子類中具有override
實現,並且與原始基礎方法的標記方式也不相關。
正如FCin所示 ,完全有可能使同步方法仍返回您想要的Task
作為該方法的返回類型。
1忽略接口的新型默認實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.