在什么情况下,您会在方法签名中不使用
我在以下代码中有这样一个方法,但我很难理解发生了什么。
为什么我的示例代码在任何
async
返回Task<T>
?我在以下代码中有这样一个方法,但我很难理解发生了什么。
为什么我的示例代码在任何
await
语句之后都不执行?
也就是说,为什么Console.WriteLine("4)");
、Console.WriteLine("3)");
和return x;
永远不会被执行?class Program
{
static void Main(string[] args)
{
TestAsync testAsync = new TestAsync();
testAsync.Run();
Console.Read();
}
}
public class TestAsync
{
public async void Run()
{
Task<int> resultTask = GetInt();
Console.WriteLine("2)");
int x = await resultTask;
Console.WriteLine("4)");
}
public async Task<int> GetInt()
{
Task<int> GetIntAfterLongWaitTask = GetIntAfterLongWait();
Console.WriteLine("1)");
int x = await GetIntAfterLongWaitTask;
Console.WriteLine("3)");
return x;
}
public Task<int> GetIntAfterLongWait()
{
Task.Run(() =>
{
for (int i = 0; i < 500000000; i++)
{
if (i % 10000000 == 0)
{
Console.WriteLine(i);
}
}
});
Console.WriteLine("Returning 23");
return new Task<int>(() => 23);
}
}
/*
Output is:
Returning 23
1)
2)
<list of ints>
*/
Task<T>
是一个合法的类型,可以被任何方法返回。如果该方法前面没有加上async
关键字,那么就无法在该方法中使用await
。 - EnigmativityTask
构造函数实际上没有任何用例。 - Stephen Clearyasync
的方法内部使用await
关键字。这与你调用的方法的标记无关。 - Enigmativity