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。