次の方法を考えます。
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 を呼び出して非同期関数を渡す代わりに、非同期メソッドを記述してそれを待機しないのはなぜでしょうか?