質問: db.Users.Find(user.Id); db.Users.Remove(deletedTargetUser); db.SaveChanges(); return Task.FromResult(default(object)); } で、コメントにはIdentityResult オブジェクトが返ると書いてありますが、コードからはそのように読み取れません。
回答: こんにちは。 まず結論から、「IdentityResultオブジェクトが返る」は完全に嘘コメントですね! メソッド`Task.FromResult`は、Completedな状態の`Task`を作り出すファクトリメソッドです。 メソッド`DeleteAsync`は、戻り値が`Task`ではなく`Task`となっているので、結果を持たない非同期処理を表しています。 なので、単純に「完了した」「失敗した」などを表現できるTaskを結果として返却してしまえばいいわけです。 よって、`Task.FromResult`を使用して、無意味な値`default(object)`(== null)を入れた「最初から完了しているTask」を作成して返しているのです。 実際、このコードはかなり悪い例です。 `DeleteAsync`という名前を持っていますが、やっていることは、 * 「同期的に」ユーザーを検索 db.Users.Find(user.Id); * 「同期的に」ユーザーを削除 db.Users.Remove(deletedTargetUser); * 「同期的に」DBに反映 db.SaveChanges(); * 「完了状態で中身の無いTask」を作成し、それを結果として返却 Task.FromResult(default(object)); と、最初から最後まで完全に同期処理になっており、`Task`を返す意味が全くないコードになっています。メソッド名も嘘というのはちょっと笑えないですね。 普通に非同期をやるなら、メソッド内の処理を丸ごと`Task.Run`に包んで、その`Task`を返すのが一般的でしょう。