1. ホーム
  2. c#

[解決済み] FuncデリゲートとAsyncメソッドの使い分け

2023-04-29 21:05:41

質問

Funcを非同期メソッドで使用しようとしています。そして、エラーが発生します。

非同期ラムダ式からデリゲート型に変換できない 'Func<HttpResponseMesage>' . 非同期ラムダ式は、void、Task、または Task<T> を返すかもしれませんが、これらはいずれも 'Func<HttpResponseMesage>' .

以下は私のコードです。

public async Task<HttpResponseMessage> CallAsyncMethod()
{
    Console.WriteLine("Calling Youtube");
    HttpClient client = new HttpClient();
    var response = await client.GetAsync("https://www.youtube.com/watch?v=_OBlgSz8sSM");
    Console.WriteLine("Got Response from youtube");
    return response;
}

static void Main(string[] args)
{
    Program p = new Program();
    Task<HttpResponseMessage> myTask = p.CallAsyncMethod();
    Func<HttpResponseMessage> myFun =async () => await myTask;
    Console.ReadLine();
}

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

エラーにあるように、非同期メソッドが返すのは Task , Task<T> または void . だから、これを動作させるためにあなたはできます。

Func<Task<HttpResponseMessage>> myFun = async () => await myTask;