尝试在下面的示例中了解async / await:
public static Task <string> job()
{
Console.WriteLine("start delay 1");
Task.Delay(2000);
Console.WriteLine("sleep done 1");
Task<string> t = new Task<string>(()=> {
Console.WriteLine("start delay 2");
Task.Delay(3000);
Console.WriteLine("sleep done 2");
return "aaaa"; }) ;
t.Start();
return t;
}
public async static void caller()
{
string s = await job();
Console.WriteLine("result is {0}", s);
}
public static void Main()
{
caller();
Console.WriteLine("done with caller");
Console.ReadLine();
}
为了获得更清晰的图片,我想让任务运行一段时间,我添加了Task.Delay()。两次延误都没有时间,并立即完成。为什么?如何让我的任务花一些时间在简单的工作上,以使其持续更长时间?
答案 0 :(得分:1)
Task.Delay
创建一个延迟指定时间的任务。你确实产生一个延迟2秒的任务,但你永远不会等待它。
在呼叫中添加await
会解决此问题。 (您必须标记方法async
)
public static async Task <string> job()
{
...
await Task.Delay(2000);
...
}
您可以阅读有关异步编程here
的更多信息答案 1 :(得分:0)
Task.Delay返回一个任务,该任务将在您提供的给定毫秒内完成。为了在这一点上执行你的代码(这是对它的作用的大量简化,你应该在c#中对async / await进行更多的学习)你需要等待对这样的调用Task.Delay(2000)
await Task.Delay(2000);
使用你需要的await关键字将你的方法签名标记为async,如下所示
public static async Task<string> job()
但我强烈建议您阅读async并等待