簡體   English   中英

在 C# 中使用異步和任務

[英]Using async and tasks in 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,它需要將該方法標記為異步。 如果我將 async 添加到方法中,那么顯示 Task.FromResults(0) 的 2 行就會出錯。 我要覆蓋的底層方法需要該特定類型的返回。

我確定我遺漏了一些簡單的東西,但我還沒有對 Async Await 做很多事情,所以我正在尋找有關如何設置此方法的指導。

編輯

讓我們看看我是否可以涵蓋下面每個人的評論。

rmjoia - 如果我在 Task 前面添加 async 那么 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 - 由於您是第一個提出此建議的人,所以您可以提交答案,我會接受。

您應該返回Task<int>而不僅僅是Task

protected override async Task<int> HandleRequirementAsync(
        AuthorizationHandlerContext context,
        OperationAuthorizationRequirement requirement,
        string resource)
{
    if (context.User == null || resource == null)
    {
        return 0;
    }

    var members = await TeamsGraph.GetTeamMembersAsync(resource, context.User);

    return 0;
}

你能做到這一點:

  var members = TeamsGraph.GetTeamMembers(resource, context.User);
  members.Wait();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM