mcs*_*odo 1 c# asynchronous async-await
我有以下代码:
static async Task Callee()
{
await Task.Delay(1000);
}
static async Task Caller()
{
Callee(); // #1 fire and forget
await Callee(); // #2 >1s
Task.Run(() => Callee()); // #3 fire and forget
await Task.Run(() => Callee()); // #4 >1s
Task.Run(async () => await Callee()); // #5 fire and forget
await Task.Run(async () => await Callee()); // #6 >1s
}
static void Main(string[] args)
{
var stopWatch = new Stopwatch();
stopWatch.Start();
Caller().Wait();
stopWatch.Stop();
Console.WriteLine($"Elapsed: {stopWatch.ElapsedMilliseconds}");
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
#1以最简单的方式点火和忘记.#2只是等待.有趣的东西从#3开始.这些电话背后的深度逻辑是什么?
我知道在ASP.NET中使用fire'n'forget作为警告的指向这里.我问这个问题,因为我们正在将我们的应用程序转移到我们不再使用的服务结构上,HostingEnvironment.QueueBackgroundWorkItem(async cancellationToken => await LongMethodAsync());建议只需将其替换为Task.Run.
我看到Task.Run运行一个新线程,那么#3和#5之间会有什么区别呢?
我问这个,因为我们正在将我们的应用程序移动到服务结构,我们不再使用HostingEnvironment.QueueBackgroundWorkItem(async cancellationToken => await LongMethodAsync()); 并且建议只需用Task.Run替换它.
这些电话背后的深度逻辑是什么?
| 归档时间: |
|
| 查看次数: |
2965 次 |
| 最近记录: |