我可以使用新的async/await方法与此代码
本文关键字:方法 await 代码 async 可以使 我可以 | 更新日期: 2023-09-27 18:14:03
我最近安装了VS2012,我正在阅读新的异步修饰符以及如何将其用于异步编程。
现在,它很容易与内置框架函数一起使用,比如在System中。IO或在web服务调用,但我试图使用我自己的功能。我制作了一个小型控制台应用程序,基本上异步任务是一个随机数,将在循环中生成,直到它等于0,同时我想显示加载消息。下面是我完成的代码:
private static void Main(string[] args)
{
var rnd = new Random();
var factory = new TaskFactory();
var task = GetRandomNumber(rnd);
while(!task.IsCompleted){
System.Console.Write("Loading .");
System.Console.Write(".");
System.Console.Write("./n");
}
}
private static async Task GetRandomNumber(Random rnd)
{
await new Task(delegate
{
while (rnd.Next() != 0)
{
}
});
}
很明显,我很迷失在如何做到这一点,在这里我只是保持编码,如果我是多,是可能实现这种行为与异步/等待模式?如何?
async
并不一定意味着"多线程"。您可以使用Task.Run
来旋转一个新的后台任务,您可以使用await
。
private static void Main(string[] args)
{
var rnd = new Random();
var task = GetRandomNumber(rnd);
while(!task.IsCompleted){
System.Console.Write("Loading .");
System.Console.Write(".");
System.Console.Write("./n");
}
}
private static Task GetRandomNumber(Random rnd)
{
return Task.Run(() =>
{
while (rnd.Next() != 0)
{
}
});
}
虽然我可能会这样做:
private static void Main(string[] args)
{
MainAsync().Wait();
}
private static async Task MainAsync()
{
var rnd = new Random();
var randomTask = GetRandomNumber(rnd);
System.Console.Write("Loading .");
while (await Task.WhenAny(randomTask, Task.Delay(500)) != randomTask)
{
System.Console.Write(".");
}
System.Console.WriteLine();
}
private static Task GetRandomNumber(Random rnd)
{
return Task.Run(() =>
{
while (rnd.Next() != 0)
{
}
});
}