c# - 调用异步订单

标签 c# multithreading invoke

我有不同的场景,与 this question 中的场景不同,因此还有一个问题。

让我们看下面的例子:

void PerformanceCriticalMethod()
{
    Dispatcher.Invoke(() => Log.Add("1"));
    ... some job
    Dispatcher.Invoke(() => Log.Add("2"));
}

Invoke 会产生性能问题。为了尝试修复它,我使用 InvokeAsync 代替 Invoke,它似乎可以工作,但重要的是 2 将在 1 之后输出。

我可以假设如果从同一个线程调用两个 InvokeAsync 它们将以相同的顺序执行吗?我的 winapi 的坚果告诉我这是真的,但我想确定一下。

另一个相关问题与链接问题相同:如果通过不同线程的 InvokeAsync 操作调用相同的方法,那么调用 InvokeAsync< 的线程首先执行该方法的机会有多大 更早?

P.S.:我感觉问题应该改写为“InvokeAsync 的工作原理”,但“顺序”一词可能 100% 是人们(包括我)会尝试搜索的内容。

最佳答案

请检查一下 http://referencesource.microsoft.com/#WindowsBase/Base/System/Windows/Threading/Dispatcher.cs,1045

当您调用 InvokeAsync 时,一个操作会被放入 PriorityQueue 中,因此我想如果您调用多个具有相同优先级的操作,您可以确信这些操作将以相同的顺序执行。

关于c# - 调用异步订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32778051/

相关文章:

c# - Digg 风格的 Ajax 投票按钮

c# - .NET 框架的部署率是多少?

c# - 不指定参数和返回类型的函数指针

.net - ASP.Net 4中的ThreadAbortException泄漏文件句柄?

java - 我应该如何终止 Java 中的循环子线程?

c# - 调用Invoke挂起程序

c# - GridView 数据绑定(bind)

Python什么都不打印?

C# - 来自方法的自动委托(delegate)类型

java - 通过 java -classpath xxx -jar jarfile 调用时找不到依赖类,但通过 java -classpath xx class 可以找到依赖类