Wal*_*eed 0 c# multithreading async-await
I have the following code
class Program
{
public async Task<bool> StartMyTask()
{
await Foo();
return true;
}
public async Task<bool> Foo()
{
for (int i = 0; i < 1000000; i++)
{
Console.WriteLine("Loop");
}
return true;
}
static void Main(string[] args)
{
Program obj = new Program();
var myTask = obj.StartMyTask();
Console.WriteLine("Before Task Return");
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,当调用“await Foo()”时,将创建一个线程来执行“Foo()”方法,并将控制权返回给调用者(Main方法)。
考虑到这一点,“Before Task Return”应该在“Foo()”方法完成之前打印。但它没有发生,首先“Foo()”方法完成,然后显示“任务返回之前”。
根据我的理解,当调用“await Foo()”时,将创建一个线程来执行“Foo()”方法,并将控制权返回给调用者(Main方法)。
不,绝对不是。async并且await不要自行创建线程。async允许您使用await, 并将await“异步等待” - 即暂停该方法,返回,然后在其操作完成时恢复该方法。
请注意,编译器会向您发出警告,表明您已标记了一个方法async,但它将同步运行。所以编译器已经告诉你到底出了什么问题。
如果想使用后台线程,可以使用Task.Run调用同步Foo方法:
public async Task<bool> StartMyTask()
{
await Task.Run(() => Foo());
return true;
}
public bool Foo()
{
for (int i = 0; i < 1000000; i++)
{
Console.WriteLine("Loop");
}
return true;
}
Run Code Online (Sandbox Code Playgroud)