как в WinForms дождатся завершения задачи ?

Ростигай
Дата: 18.07.2014 19:19:38
Привет.

Подскажите, как заставить данный код работать:

private void button1_Click(object sender, EventArgs e)
{
var someTask = Task.Factory.StartNew<int> (...);
int i = someTask.Result;
...делаем что-то еще с I
}



зависает при ожидании результата.

Насколько я понимаю, проблема в синхронизационном контексте. В NET 4.5 можно использовать ConfigureAwait (false), что, наверное, поможет. Но, к сожалению, у меня .NET 4.0 !

И все таки, объясните пожалуйста - почему именно зависает. Чтобы знать на будущее.

ЗЫ. Я вижу вариант с ContinueWith. А без него никак ? Чтобы остаться в пределах обработчика нажатия кнопки. Не хочется усложнять код.
Алексей К
Дата: 18.07.2014 19:25:18
Ростигай
Я вижу вариант с ContinueWith. А без него никак?
Без него никак.
Ростигай
Чтобы остаться в пределах обработчика нажатия кнопки. Не хочется усложнять код.
Вставляем в ContinueWith лямбду и остаёмся в пределах метода и с простым кодом.
Ростигай
Дата: 18.07.2014 19:41:58
Алексей К,

Спасибо за ответ.
Да наверное все же правильней через continueWith. так и кнопка не заблокирует приложение. Это правильный путь многопоточности.

Просто психологически не нравится, что рабочий код выходит за пределы кнопки :) Там же еще придется делать обработку исключений в продолжении :)

да... нужно привыкать к многопоточности конечно.