Общая сигнатура лямбда-метода - PullRequest
3 голосов
/ 04 сентября 2011

Я уверен, что это довольно стандартные вещи, но я не могу обернуться вокруг этого.

Я пишу простой вспомогательный класс для выполнения кода в отдельных потоках.Я очень хорошо знаю, как это сделать, но не использую лямбды.Я предполагаю, что речь идет об общем использовании лямбда, а не темы.

То, что я хочу написать, выглядит примерно так:

ThreadedMethods.Parameterized<int>((i) => { for (;i < 10; i++;) DoSomething();});

и

ThreadedMethods.Parameterized<IEnumberable<Something>>((list) => 
{
    foreach (var s in list)
    {
         s.SomeHeavyProcessing();
    }
});

Возможно ли это?И, кроме того, есть ли причина пытаться достичь этого в первую очередь, так как лямбда будет иметь доступ ко всему, что находится в рамках вызова метода?

1 Ответ

2 голосов
/ 04 сентября 2011

Конечно, это возможно.У вас должна быть реализация для

class ThreadedMethods {
    public static void Parameterized<T>(Action<T> action) {
        // Start the action on a different thread using possibly ThreadPool.QueueUserWorkItem
    }
}

Затем вы вызываете свою реализацию, как вы показали с примерами в своем вопросе.

РЕДАКТИРОВАТЬ: дополнительная информация о том, как вы можете вызывать ThreadPoolМетод .QueueUserWorkItem, когда у вас есть Действие

    public void StartOnDifferentThread<T>(Action<T> action, T input)
    {
        ThreadPool.QueueUserWorkItem(o => action((T)o), input);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...