私は非同期メソッドのために "待っている"非同期Func <を持っています。私は以下のコードのようなTaskFactory.StartNewを使用しているのFunc <に平行呼び出し>、をたくさん作りたいが、私はfollowinエラーが表示されます。TaskFactory.StartNew <Task<Result>を非同期メソッドで使用するにはどうすればよいですか?
error converting
'System.Threading.Tasks.Task<System.Threading.Tasks.Task<Result>>'
to'System.Threading.Tasks.Task<Result>'
は、どのように私は非同期メソッドの並列呼び出しを持つことができますか?あなたはeasistソリューションを使用する必要が特別に構成TaskFactory
は、ネストされたタスクをアンラップする.Unwrap()
拡張メソッドを使用している持っているので、あなたがtaskFactory.StartNew(
代わりのTask.Run(
を使用していると仮定すると、
Func<object, Task<Result>> action = async (object m) =>
{
try
{
return await Send<Message, Result>(m as Message);
}
catch (Exception exc)
{
Result result = new Result();
(result as ResponseBaseDto).Success = false;
(result as ResponseBaseDto).ErrorList = new List<Entities.Common.ErrorDto>()
{
new Entities.Common.ErrorDto{ Code = 9999, Message = exc.Message }
};
return result;
}
};
// Error on request.ForEach
request.ForEach(r => sending.Add(taskFactory.StartNew<Task<Result>>(action, r)));
var tareas = sending.ToArray();
await Task.WhenAll(tareas);
return tareas.Select(s => s.Result).ToList();
に単純化することができる特殊なタスクファクトリを使用していない場合。あなたはおそらくそれを必要としません。同期前の ''仕事 'がある場合は、 'Task.Run()'を使います。 – SLaks
また、 'ForEach()'ではなく 'Select()'を使用してください。 – SLaks
JoséAlonso、私の編集がエラーの原因となる行を正しく指していることを確認してください。 –