我有一个异步方法,我想在完成后从同一方法获取消息。
下面是代码
static async Task<string> pizza()
{
await Task.Delay(10);
for (int i = 0; i < 100; i++)
{
//Console.WriteLine("Processing pizza...");
}
return "Pizza is ready";
}
我想在呼叫点收到此消息
....... code
Task t=null;
switch (option)
{
case 1:
{
await Task.Run(() =>
{
t=pizza();// asynchronous method
});
Console.WriteLine(t.ToString());
}
break;
.... other code
你需要Task.Run
部分吗?您可以await
在异步方法中:
var result = await pizza();
Console.WriteLine(result);
您也可以调用结果:
var result = pizza().Result;
你可以
var pizza = await pizza();
或
var pizza = pizza().GetAwaiter().GetResult();
您可以使用:
var returnValue = string.Empty;
{
returnValue = await Pizza();
}
Console.WriteLine(returnValue);
它仍将异步运行。遇到 await 语句时,控制将返回到主线程,并且不会暂停执行。一段时间后,当 Pizza 方法返回执行时,状态机将自动执行 returnValue 输出
您不需要使用 Task.Run 只是为了等待。您只需要等待异步方法。然后稍后你可以在任何你想要的地方使用 returnValue。
如果您等待它,它将异步执行。如果你这样做 t.result,它将同步执行。
这实际上取决于您执行同步或异步的需求。
在这里,我们和所谓的专家程序员一起投反对票。
尝试删除等待,放置 .结果,你会得到这个:
"这种异步方法缺少'await'运算符,并且将同步运行。考虑使用'await'运算符来等待非阻塞API调用,或者使用'await Task.Run(...('在后台线程上执行CPU密集型工作。