Я пытаюсь запустить метод async из обычного метода:
public string Prop
{
get { return _prop; }
set
{
_prop = value;
RaisePropertyChanged();
}
}
private async Task<string> GetSomething()
{
return await new Task<string>( () => {
Thread.Sleep(2000);
return "hello world";
});
}
public void Activate()
{
GetSomething.ContinueWith(task => Prop = task.Result).Start();
// ^ exception here
}
Исключение составляет:
Запуск не может быть вызван в задачу продолжения.
Что это значит, так или иначе? Как я могу просто запустить мой асинхронный метод в фоновом потоке, отправить результат обратно в поток пользовательского интерфейса?
Edit
Также попробовал Task.Wait
, но ожидание не заканчивается:
public void Activate()
{
Task.Factory.StartNew<string>( () => {
var task = GetSomething();
task.Wait();
// ^ stuck here
return task.Result;
}).ContinueWith(task => {
Prop = task.Result;
}, TaskScheduler.FromCurrentSynchronizationContext());
GetSomething.ContinueWith(task => Prop = task.Result).Start();
}