我是新来的异步编程。我有一个被调用的异步方法的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”中完成?
这不是如何线程的作品,从一个以上的,并让他们以不可预知的方式完成无序的设计。如果这是一个问题,请使用生产者/消费者模式。 –