以下是我尝试学习Task类的代码。从输出中可以看到主线程和任务线程同时运行。但是在异步方法中,我会收到警告消息,提示:
"警告 1:此异步方法缺少'await'运算符并将同步运行。请考虑使用'await'运算符等待非阻塞API调用,或者使用'await Task.Run(...)'在后台线程上执行CPU绑定工作。"
那么下面的代码是同步的吗?
namespace SampleThreadTaskClass
{
class Program
{
static void Main(string[] args)
{
Task task = new Task(ProcessDataAsync);
task.Start();
Console.WriteLine("Enter any key");
string input = Console.ReadLine();
Console.WriteLine("You entered: " + input);
Console.ReadLine();
}
static async void ProcessDataAsync()
{
for (int i = 0; i < 20; i++)
{
Thread.Sleep(500);
Console.WriteLine("processing... " + i);
}
}
}
}
async
。它并不意味着“将这个同步方法变成异步方法”。它的意思是“允许我在这个异步方法中使用异步等待”。该方法必须已经是异步的。同样,await
也是如此。它不会使其参数异步化;它只是标识了异步工作流程中必须在继续工作流之前完成工作的一个点。 - Eric Lippert