- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下代码:
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();
}
#1 以最简单的方式触发并遗忘。 #2 只是等待。有趣的事情从#3 开始。调用背后的深层逻辑是什么?
我知道在 ASP.NET 中使用 fire'n'forget caveats 指出 here .我问这个,因为我们正在将我们的应用程序移动到我们不再可以使用 HostingEnvironment.QueueBackgroundWorkItem(async cancellationToken => await LongMethodAsync());
的服务结构,建议是简单地替换它与 Task.Run
。
我看到 Task.Run
运行了一个新线程,#3 和 #5 之间有什么区别?
最佳答案
I'm asking this, because we're moving our app to service fabric where we no longer can use HostingEnvironment.QueueBackgroundWorkItem(async cancellationToken => await LongMethodAsync()); and the advice is to simply replace it with Task.Run.
这是个糟糕的建议。你应该使用 separate background process separated from your web frontend by a queue .
What's the in-depth logic behind the calls?
关于c# - 异步/等待有/没有等待(即发即弃),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46053175/
我是一名优秀的程序员,十分优秀!