c#并发,重叠的回调

时间:2017-03-22 10:26:48

标签: concurrency callback

简短的技术问题:

如果我在下面的课程中有不确定数量的重叠(按时间)实例。它是什么以及如何确保,"这个"在" call_back_when_done"属于同一个"这个"就像在"开始"?

class MyClass{
 int ident = -1;
 bool ready = false;

 void Start(string url){
  ident = aStaticClass.DoSomethingAndForkThread(url, callback_when_done);
 }

 void call_back_when_done(){
  ready = true;
 }
}

e.g:

for (int i=0; i < 3; i++)
    new MyClass().Start(<aURL>);

谢谢

2 个答案:

答案 0 :(得分:0)

首先,您可以将该功能绑定到&#34;这个&#34;就像这里描述的使用currying:(How) is it possible to bind/rebind a method to work with a delegate of a different signature?

我更喜欢lambda函数用于您的示例案例,如下所述:C# Lambdas and "this" variable scope

Lambda函数绑定到&#34;这个&#34;的范围。创建它们的上下文。您的周围类的成员将自动对Lambda函数可见。使用Lambda函数,您将获得更短的代码,编译器也可以更好地优化代码。

答案 1 :(得分:0)

保证。 当您在callback_when_done中将DoSomethingAndForkThread传递给Start时,您不仅要传递原始函数指针(就像在C ++中使用&MyClass::callback_when_done那样,而是某种元组由要调用的方法和应该调用该方法的对象(this)。

如果您更喜欢它,您也可以手动编写闭包:

void Start(string url) {
  var that = this; // that get's captured by the closure
  ident = aStaticClass.DoSomethingAndForkThread(url, () => that.callback_when_done());
}