使用異步和任務,我試圖創建一個看起來像這樣在C#
protected override Task
HandleRequirementAsync(AuthorizationHandlerContext context,
OperationAuthorizationRequirement requirement,
string resource)
{
if (context.User == null || resource == null)
{
return Task.FromResult(0);
}
var members = await TeamsGraph.GetTeamMembers(resource, context.User);
return Task.FromResult(0);
}
這種方法給我一個錯誤,因爲我有AWAIT TeamsGraph,這就要求標記爲異步方法的方法。如果我向該方法添加異步,則表示Task.FromResults(0)的兩行將出錯。該特定類型的返回是由我重寫的底層方法所要求的。
我確定我錯過了一些簡單的東西,但我只是沒有完成異步等待,所以我正在尋找如何設置此方法的指導。
編輯
讓我們來看看,如果我可以在下面覆蓋大家的意見。
rmjoia - 如果我在任務前添加異步,則返回2的Task.FromResult(0)行出錯。
Bradley Uffner - 我正在做的代碼來自ASP.NET Core的授權示例,它是預期返回的內容。一個例子見https://docs.microsoft.com/en-us/aspnet/core/security/authorization/secure-data。
David - 在await線後面的代碼中有更多的代碼來檢查用戶是否是TeamMember,我只是爲了簡單而省略。
JSteward - 由於您是第一個提出這個問題的人,您可以提交答案,我會接受。
附加異步,大功告成,是因爲@JSteward說,去掉Task.FromResult(0); – rmjoia
當一個方法被標記爲'async'並且只返回'Task'而不需要'return'語句時,標記'async'方法並簡單地移除'Task.FromResult'。 – JSteward
你回來什麼類型的價值?你的方法被聲明爲'Task',它不返回任何值,但你使用'Task.FromResult(0)'嘗試返回'0'。如果你需要返回一個'int',它應該是'Task'。你需要選擇一個或另一個。 –