给定以下方法:
public async Task<MyObject> DoSomethingAsync() {
// do some work
await OpenSomeFileAsync();
return new MyObject();
}
有没有区别:
public async void SomeEventHandler(EventArgs args) {
var myObject = await await Task.Factory.StartNew<Task<MyObject>>( DoSomethingAsync);
// do something with myObject
}
和:
public async void SomeEventHandler(EventArgs args) {
var myObject = await DoSomethingAsync();
// do something with myObject
}
我在想 DoSomethingAsync 的“做一些工作”部分会在第一种情况下立即发生在新任务中,但老实说,我并不完全了解 Tasks、async 和 await 是如何工作的,而且我很漂亮当然,我只是为自己把事情复杂化了。
编辑:
这个问题来自于查看这个 Metro 示例: http ://code.msdn.microsoft.com/windowsapps/Sharing-Content-Target-App-e2689782
特别是在 MainPage.xaml.cs 中,他们有这个:
var unused = Task.Factory.StartNew(async () => { // some work... });
// unused is of type Task<TResult>
我试图在不使用匿名异步函数的情况下对其进行返工,我开始想,为什么不写一个异步方法并等待它,而不是调用 StartNew 并提交一个异步函数呢?