Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用异步和任务#_C#_Asynchronous_Async Await - Fatal编程技术网

C# 在C中使用异步和任务#

C# 在C中使用异步和任务#,c#,asynchronous,async-await,C#,Asynchronous,Async Await,我正在尝试创建一个如下所示的方法 protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, OperationAuthorizationRequirement requirement, string resource) { if (context.User == null || resource ==

我正在尝试创建一个如下所示的方法

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);
    }
这个方法给了我一个错误,因为我有wait TeamsGraph,它需要将这个方法标记为async。如果我将async添加到该方法中,那么表示Task.FromResults(0)的两行就出错了。我覆盖的底层方法需要返回该特定类型

我确信我遗漏了一些简单的东西,但我只是没有对AsyncWait做太多的工作,所以我正在寻找关于如何设置此方法的指导

编辑

让我们看看我是否能涵盖下面每个人的评论

rmjoia-如果我在任务前面添加了async,那么返回任务的2.FromResult(0)行出错

Bradley Uffner-我正在执行的代码来自ASP.NET Core的授权示例,它是预期返回的代码。有关示例,请参见

David-在等待行之后还有更多的代码要检查用户是否是团队成员,为了简单起见,我刚刚提到了这一点


JSteward-既然你是第一个提出这个建议的人,你可以提交一个答案,我会接受。

你应该返回
任务
而不仅仅是
任务

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;
}
protected override async Task HandleRequirementAsync(
授权HandlerContext上下文,
操作授权要求,
字符串资源)
{
if(context.User==null | | resource==null)
{
返回0;
}
var members=await TeamsGraph.GetTeamMembersAsync(resource,context.User);
返回0;
}

您能做到这一点吗:

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

在任务之前添加async,就完成了,如@JSteward所说,是的,删除任务。FromResult(0);将方法标记为
async
,只需删除
Task.FromResult
,当方法标记为
async
并仅返回
Task
时,您不需要
return
语句。您返回什么类型的值?您的方法声明为
Task
,它不返回任何值,但您正在使用
Task.FromResult(0)
尝试并返回
0
。如果需要返回一个
int
,它应该是
任务
。你需要选择一个或另一个。现在还不清楚这个方法应该返回或执行什么操作。您试图返回硬编码的整数值,而该方法中唯一的异步操作将导致完全忽略的结果。您可以将整个方法体替换为
return Task.FromResult(0)你能在这里澄清实际意图吗?@BradleyUffner返回
任务。FromReslut(0)
方法返回
任务
效果很好。在返回
任务的异步方法中返回
0
不会。否,因为我正在重写一个不可能的方法,因此无法返回异步0或任务。FromResult(0),这相当于尝试在void方法中返回0。