我正在尝试从普通方法中运行一个“异步”方法:
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
}
抛出的异常是:
不允许在续任务上调用 Start。
这到底意味着什么?我该如何简单地在后台线程上运行我的异步方法,并将结果分派回 UI 线程?
编辑
也尝试过 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();
}
return new Task
而不是return Task.Factory.StartNew
。 - McGarnagleasync void
方法,它们通常不是正确的选择。 - svick