Проблема в том, что keyword
меняется. Делегат =>
закрывается на текущем значении переменной, а не на том значении, которое оно имело в прошлом при создании делегата. Подробное объяснение есть в сообщении Эрика Липперта .
Эта классическая ошибка C та же ошибка:
#include <stdio.h>
#include <pthread.h>
void * MyThreadFunction(void *x)
{
printf("I am thread %d\n", * (int *) x);
return NULL;
}
int main(void)
{
int i;
pthread_t t[10];
void *ret;
for(i=0; i<10; i++)
pthread_create(&t[i], NULL, MyThreadFunction, (void *) &i);
for(i=0; i<10; i++)
pthread_join(t[i], &ret);
}
* (int *) x
получает значение current , равное i
, а не значение при создании потока.