2016-11-11 11 views
0

私は方法int => Task<IEnumerable<string>>>を入力し、次にM1のパラメータにする方法ラムダ型をint => IEnumerable <string>> int =>タスク<IEnumerable <string> >>に変換しますか?

string M1(Func<int x, Task<IEnumerable<string>>> getList) 
// getList: int => Task<IEnumerable<string>>> 
{ ...... } 

を持っています。

var l = new List<string>(); .... // l is pre-built 
var r = M1(x => l); // The type of param is int => IEnumerable<string>> 

async x => l警告を与えます。

答えて

3

Task.FromResult()を使用して、結果がすでに完了した状態のタスクを作成します。

var l = new List<string>(); .... // l is pre-built 
var r = M1(x => Task.FromResult<IEnumerable<string>>(l)); 
+0

「async x => l'と比較する方法は?それは警告を発するでしょう。 – ca9163d9

+0

これは 'async x => l'と同じロジックを実行しますが、警告を出さずにコンパイラが余分なコードを生成することもありません。その警告が表示されるときはいつでも、問題を解決するために返すオブジェクトとして 'Task.FromResult ()'を使用することができます。 –

+0

[こちらはDotNetFiddleです](https://dotnetfiddle.net/89Luwb)は、2つを示しています。 FromResultのバージョンの隣に '!'がないことを確認してください。 –

関連する問題