1 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
我了解您正在創(chuàng)建一個(gè)希望被重寫的類,并且您希望為 SetupAsync() 提供默認(rèn)實(shí)現(xiàn),以允許重寫版本async.
async 關(guān)鍵字不是方法簽名的一部分,必須復(fù)制方法簽名才能覆蓋方法。只有返回類型、參數(shù)和訪問修飾符。
如果您的方法中沒有異步代碼,則不要使用async。如果您想允許覆蓋版本為 async,那么您所需要做的就是讓它返回 Task。
在默認(rèn)實(shí)現(xiàn)(同步運(yùn)行)中,您只需使用 在 Task 中返回一個(gè)值。Task.FromResult
例如:
class Test {
protected virtual Task<bool> SetupAsync() {
return Task.FromResult(true);
}
}
class Test2 : Test {
protected override async Task<bool> SetupAsync() {
await Task.Delay(1000);
return false;
}
}
重寫方法與該方法的內(nèi)部工作原理無關(guān),而是與該方法如何暴露給其他代碼有關(guān)。任何代碼都必須能夠以與默認(rèn)實(shí)現(xiàn)相同的方式調(diào)用重寫的方法,并且 async 關(guān)鍵字本身與此沒有任何關(guān)系。
async 關(guān)鍵字僅允許在方法內(nèi)使用 。確實(shí),使用 關(guān)鍵字需要方法返回 ,但事實(shí)上它是 返回 會(huì)改變其他代碼與其交互的方式。await asyncTaskTask
- 1 回答
- 0 關(guān)注
- 192 瀏覽
添加回答
舉報(bào)