1. ホーム
  2. c#

[解決済み] 非同期await return タスク

2022-04-26 18:11:54

質問

どなたか、シンクロナス・メソッドとはどういう意味か説明してください。もし私がこのメソッドを async を実行すると、VSから文句を言われます。

これは動作します。

public Task MethodName()
{
     return Task.FromResult<object>(null);
}

これはうまくいきません。

public async Task MethodName()
{
     return Task.FromResult<object>(null);
}

ということで、基本的には具体的にどういうことなのか、教えていただきたいのですが。 Task.FromResult<object>(null);

どのように解決するのですか?

async メソッドは、通常のメソッドとは異なります。から返すものは何でも async メソッドは Task .

値を返さない場合(void)は、ラップされます。 Task を返した場合 int でラップされます。 Task<int> といった具合です。

非同期メソッドが int を指定すると、そのメソッドの戻り値の型を Task<int> を使えば、プレーンに戻る int ではなく Task<int> . コンパイラは int まで Task<int> をお届けします。

private async Task<int> MethodName()
{
    await SomethingAsync();
    return 42;//Note we return int not Task<int> and that compiles
}

セイムウェイ、帰ってきたら Task<object> メソッドの戻り値の型は Task<Task<object>>

public async Task<Task<object>> MethodName()
{
     return Task.FromResult<object>(null);//This will compile
}

このメソッドは Task の場合、何の値も返さないはずです。そうでないと、コンパイルできません。

public async Task MethodName()
{
     return;//This should work but return is redundant and also method is useless.
}

を持たない非同期メソッドでは、そのようなことは起こらないことを覚えておいてください。 await 文は async .