1
假設您正在調用方法異步到UI線程上。同步異步調用的方法?
隨着
UIDispatcher.BeginInvoke(new Action(_insert), DispatcherPriority.Normal, new object[] { })
你正在做的調用。從現在起,運行時環境決定何時執行該方法,而程序繼續其「正常」執行路徑。
我現在想知道是否有任何機制在返回時同步這些異步執行的方法?看起來,與使用多個線程時幾乎有相同的問題。
但是被認爲是線程之前被異步調用的返回方法?這似乎不是如此,因爲通常的同步努力如
lock (someObject) { //... }
或使用專用鎖似乎不起作用。
附錄:
哪裏出現這個問題我的實際情況如下:
的異步調用方法調用作爲其最後聲明靜態類的return
方法。在這個return
方法裏,一個常用的資源(一個List)必須被同步。考慮以下(概觀樣)代碼剪斷例舉:
// A simple method that gets invoked asynchronously
public void _insert() {
// do some code
StaticClass.Returned();
}
public static StaticClass {
//...
public static void Returned() {
// use a shared resource !
}
}
'的BeginInvoke()'返回一個['DispatcherOperation'](http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcheroperation.aspx),讓您等待異步調用完成並獲取結果;你在找什麼? – millimoose 2012-07-09 14:18:29
以及我需要一種方法來確保'Returned'方法內的代碼被執行互斥。 DispatcherOperation對象似乎是有用的工具,但我認爲它不會幫助我實現這一目標。 – 2012-07-09 14:22:56
相互排斥什麼?您只能顯示一個對共享資源的訪問權限。我發現非常令人懷疑的是,'lock'將不起作用,如果沒有,你可能有更多的任何對象的實例作爲信號量 - 在調試器中檢查。 – millimoose 2012-07-09 14:23:45