我是新來的異步編程。我有一個被調用的異步方法的C#DLL,接受函數指針(委託)並在計算「結果」後調用此回調函數。異步回調
public delegate void CreatedDelegate(Foo result);
public void CreateAsync(CreatedDelegate createdCallback)
{
Task t = Task.Factory.StartNew(() =>
{
Foo result = ...
createdCallback(result);
});
}
類型的代表回調「CreatedDelegate」是(在我的情況下)的函數的指針的C++/CLI方法與結果的工作原理。
void CreatedCallback(Foo^ result)
{
// do something with result
}
所以這個異步概念似乎在大多數情況下工作得很好,但有時候我會遇到一些錯誤。如果使用不同的計算工作多次調用函數「CreateAsync」,那麼我怎麼能實現它,調用「CreatedCallback」的結果調用是否與最初調用「CreateAsync」的順序相同?爲了使它更清楚:即使後續調用「CreateAsync」的速度更快,並且實際上會更早地調用回調,第一次調用「CreateAsync」應導致第一次調用「CreatedCallback」。
也許這可以通過一次只允許一個活動的新線程在異步「CreateAsync」中完成?
這不是如何線程的作品,從一個以上的,並讓他們以不可預知的方式完成無序的設計。如果這是一個問題,請使用生產者/消費者模式。 –