gpt4 book ai didi

c# - 我从只返回 Task 而不是 Task 的方法返回什么?

转载 作者:行者123 更新时间:2023-11-30 13:07:55 24 4
gpt4 key购买 nike

我从 D4() 返回什么?

async static Task D4()
{
Console.Write("Enter the divisor: ");
var n = int.Parse(Console.ReadLine());
Console.WriteLine((24 / n).ToString());

// NONE OF THESE WORK
// THE COMPILER COMPLAINS WITH AN ERROR THAT SAYS:
// Since 'Program.D4()' is an async method that returns 'Task',
// a return keyword must not be followed by an object expression.
// Did you intend to return 'Task<T>'?
// return new TaskCompletionSource<object>().Task;
// return Task.FromResult<object>(null);
// return Task.FromResult<bool>(false);
// return Task.FromResult(0);
}

我问了something similar早些时候,它可能适用于我当时的情况,但我不记得现在的情况。另外,this thread似乎暗示了我正在尝试的同一件事。我不确定为什么它对我的情况不起作用。

更新

为了完整起见,这里是全部相关代码。

async static Task A4() { await B4(); }
async static Task B4() { await C4(); }
async static Task C4() { await D4(); }
async static Task D4()
{
Console.Write("Enter the divisor: ");
var n = int.Parse(Console.ReadLine());
Console.WriteLine((24 / n).ToString());

// return new TaskCompletionSource<object>().Task;
// return Task.FromResult<object>(null);
// return Task.FromResult<bool>(false);
// return Task.FromResult(0);
}

最佳答案

您可以将 async 视为为您构造一个 Task 包装器。如果您不使用 async,那么您可以返回一个实际的 Task 对象。

您的第一个代码示例使用的是 async,但随后您尝试返回一个 Taskasync 不需要返回 Task:

async static Task D4()
{
Console.Write("Enter the divisor: ");
var n = int.Parse(Console.ReadLine());
Console.WriteLine((24 / n).ToString());

return; // May be removed, since it is implicit.
}

您的第二个代码示例删除了 async 然后尝试不返回任何内容;在这种情况下,由于 async 没有为您创建一个 Task,您需要自己创建一个:

static Task D4()
{
Console.Write("Enter the divisor: ");
var n = int.Parse(Console.ReadLine());
Console.WriteLine((24 / n).ToString());

return Task.FromResult(0);
}

第一个示例(其中 async 为您创建了 Task)更为惯用。请注意,您还应该在 async 方法中使用 await

关于c# - 我从只返回 Task 而不是 Task<T> 的方法返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37646858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com