亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

*虛擬*方法缺少“await”;返回值?

*虛擬*方法缺少“await”;返回值?

C#
慕無忌1623718 2023-12-17 10:48:12
我有一個異步虛擬方法,它返回一個默認布爾值,該布爾值在我的應用程序的某些基本功能中使用。即,如果沒有需要進行的設置,則假設它已成功。我理解非虛擬方法上下文中的警告方法,但我想知道實現的最佳方法這是一個 虛擬 方法。我應該在虛擬方法中返回什么以確保刪除此警告?或者我應該忽略?// WARNING: This async method lacks 'await'// virtual is the differentiating factor hereprotected virtual async Task<bool> SetupAsync(){    return true;}
查看完整描述

1 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

我了解您正在創建一個希望被重寫的類,并且您希望為 SetupAsync() 提供默認實現,以允許重寫版本async.


async 關鍵字不是方法簽名的一部分,必須復制方法簽名才能覆蓋方法。只有返回類型、參數和訪問修飾符。


如果您的方法中沒有異步代碼,則不要使用async。如果您想允許覆蓋版本為 async,那么您所需要做的就是讓它返回 Task。


在默認實現(同步運行)中,您只需使用 在 Task 中返回一個值。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;

    }

}

重寫方法與該方法的內部工作原理無關,而是與該方法如何暴露給其他代碼有關。任何代碼都必須能夠以與默認實現相同的方式調用重寫的方法,并且 async 關鍵字本身與此沒有任何關系。


async 關鍵字僅允許在方法內使用 。確實,使用 關鍵字需要方法返回 ,但事實上它是 返回 會改變其他代碼與其交互的方式。await asyncTaskTask


查看完整回答
反對 回復 2023-12-17
  • 1 回答
  • 0 關注
  • 169 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號