从
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);
}
我早些时候问过类似的问题,可能在我当时的情况下是有效的,但我现在不记得当时的情况了。此外,这个线程似乎暗示了同样的事情,我正在尝试。我不知道为什么它对我不起作用。
更新
为了完整起见,这里是相关代码的全部。
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 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.
}
您的第二个代码示例删除了
static Task D4()
{
Console.Write("Enter the divisor: ");
var n = int.Parse(Console.ReadLine());
Console.WriteLine((24 / n).ToString());
return Task.FromResult(0);
}
第一个示例(其中
删除async关键字,使其变为
static Task D4()
{
return Task.FromResult(0); // or one of the others from your post
}
您不需要等待
嗯,我返回
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);
return default(Task);
}
对此的一个批评是,调用者将不知道它收到了什么以及它的状态是什么。这只是一个例子,我并不真正关心,但作为一个一般原则,我认为我所说明的应该避免。
一个稍微安全但昂贵的方法也许是这样说?
private static Task cachedNoOpTask = new Task(null);
...
return cachedNoOpTask;