我想知道为什么我在B类中的控制台行没有在下面的实现中打印。如果我把控制台从Task.Run
调用中取出,它会工作得很好。我知道它们在一个单独的线程上运行,但由于我正在等待这两个线程,我想我会看到控制台语句。我错过了什么?
class Program
{
static readonly IMyInterface myInterfaceA = new A();
static readonly IMyInterface myInterfaceB = new B();
static void Main(string[] args)
{
var jk = GetRes(async (imy) => await imy.GetUser());
}
async static Task GetRes(Func<IMyInterface, Task<User>> func)
{
await func(myInterfaceA);
await func(myInterfaceB);
}
}
interface IMyInterface
{
Task<User> GetUser();
}
class A : IMyInterface
{
public async Task<User> GetUser()
{
return await Task.Run(()=>
{
Console.WriteLine($"GetUser in Class A");
return new User();
});
}
}
class B : IMyInterface
{
public async Task<User> GetUser()
{
return await Task.Run(() =>
{
Console.WriteLine($"GetUser in Class B");
return new User();
});
}
}
public class User
{
}
您从不等待jk
,因此Main()
较早退出。此时,您无法保证在进程结束之前有时间执行什么。
static async Task Main(string[] args)
{
await GetRes(async (imy) => await imy.GetUser());
}