Concurrency c#并发、重叠回调

Concurrency c#并发、重叠回调,concurrency,callback,Concurrency,Callback,一个简短的纯技术性问题: 如果我有一个不确定数量的重叠(时间方面的)下面的类实例。“完成时回拨”中的“this”与“Start”中的“this”是否属于同一个“this”以及如何确保 e、 g: for(int i=0;i > 开始/代码>时,您不仅传递了原始函数指针(就像C++中的和MyCase::CalBuffiHydo-Endo/Cuth>),而是由调用方法和方法调用的对象组成的元组。(此) 如果您喜欢更明确,也可以手动编写闭包: void Start(string url) { va

一个简短的纯技术性问题:

如果我有一个不确定数量的重叠(时间方面的)下面的类实例。“完成时回拨”中的“this”与“Start”中的“this”是否属于同一个“this”以及如何确保

e、 g:

for(int i=0;i<3;i++)
新建MyClass().Start();

谢谢

首先,您可以使用currying将函数绑定到“this”,如下所述:

对于您的示例案例,我更喜欢lambda函数,如下所述:

Lambda函数绑定到创建它们的“this”上下文的范围。周围类的成员对Lambda函数自动可见。使用Lambda函数可以得到更短的代码,编译器也可以更好地优化代码。

这是有保证的。 当您通过<代码> CalbBuff.In Soad 到 DoMothTythand FokTox< /Co> > <代码>开始/代码>时,您不仅传递了原始函数指针(就像C++中的和MyCase::CalBuffiHydo-Endo/Cuth>),而是由调用方法和方法调用的对象组成的元组。(

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

void Start(string url) {
  var that = this; // that get's captured by the closure
  ident = aStaticClass.DoSomethingAndForkThread(url, () => that.callback_when_done());
}
for (int i=0; i < 3; i++)
    new MyClass().Start(<aURL>);
void Start(string url) {
  var that = this; // that get's captured by the closure
  ident = aStaticClass.DoSomethingAndForkThread(url, () => that.callback_when_done());
}