我試圖將對服務的呼叫包裝為一個函式,以便將其傳遞給重試框架。我首先嘗試了以下內容:
Func<Task<Obj>> serviceCall = async () => await this.client.call();
Obj callResponse = await retryPolicy.ExecuteAsync(serviceCall);
這段代碼可以編譯,但是,我想為每個函式呼叫寫入日志,因此我嘗試將日志添加到函式中。我的想法是將功能更改為:
Func<Task<Obj>> serviceCall = async () => {
logger.log("Calling client");
await this.client.call();
};
但是,現在 Visual Studio 告訴我并非所有代碼路徑都回傳型別為 lambda 運算式的值Func<Task\<Obj>>。不知何故添加花括號,并將其從運算式 lambda 轉換為陳述句 lambda 會導致一些問題,我假設代碼的異步部分。
uj5u.com熱心網友回復:
您正在宣告Func<Task<Obj>>哪個不帶引數并回傳一個Task<Obj>
當您使用這樣的運算式語法時:
Func<Task<Obj>> serviceCall = async () => await this.client.call();
它翻譯成:
Func<Task<Obj>> serviceCall = async () => { return await this.client.call(); }
所以 return 陳述句是隱式的。當您使用括號時,您需要明確指定 return:
Func<Task<Obj>> serviceCall = async () => {
logger.log("Calling client");
return await this.client.call();
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/370998.html
