我有一个异步方法,我想在完成后从同一个方法获取一条消息。
以下是代码
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
答案 0 :(得分:3)
您需要using System;
using System.Diagnostics;
using System.ComponentModel;
namespace MyProcessSample
{
class MyProcess
{
public static void Main()
{
Process myProcess = new Process();
try
{
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = @"yourpath\youtube-dl.exe";
myProcess.StartInfo.CreateNoWindow = false;
myProcess.StartInfo.Arguments = "https://www.youtube.com/watch?v=KFqrp4KSxio";
myProcess.Start();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
部分吗?您可以Task.Run
使用异步方法:
await
您也可以调用结果:
var result = await pizza();
Console.WriteLine(result);
答案 1 :(得分:2)
你可以
var pizza = await pizza();
或者
var pizza = pizza().GetAwaiter().GetResult();
答案 2 :(得分:-1)
您可以使用:
import math;
binary=0b11111111110110001111111111100001
decimal=int(binary)
print(decimal)
print("{0:#b}".format(decimal))
它仍将表现为异步。遇到await语句时,控件将返回主线程并且不会暂停执行。在Pizza方法返回执行一段时间后,状态机将自动执行returnValue输出
您无需使用Task.Run等待。您只需要等待异步方法。然后,您可以在任何地方使用returnValue。
答案 3 :(得分:-4)
如果您等待它,它将异步执行。如果你做t.Result它将同步执行。
这实际上取决于您执行同步或异步的需要。
在这里,我们与所谓的专家程序员一起投票匆忙。
尝试删除等待,放入.Result,你会得到这个:
“这个异步方法缺少'await'运算符并将同步运行。考虑使用'await'运算符等待非阻塞API调用,或'await Task.Run(...)'来执行CPU绑定工作在背景线程上。“