良い日。 Task func asyncを実行する必要があります。しかし、どのようにこれを行うには?だから、C#:LINQの非同期
public async Task<string> GetPersonForSchedule(int[] usedStaff, string position)
{
var result = await staffRepository
.GetMany()
.Where(async elem => await IsGoodPersonForSchedule(elem, usedStaff, position))
.ToListAsync();
return await Task.Factory.StartNew(() => JsonConvert.SerializeObject(result));
}
private async Task<bool> IsGoodPersonForSchedule(Person person, int[] usedStaff, string position)
{
//...
var currPersonFlights = await flightStaffRepository
.GetMany()
.Include(elem => elem.Flight)
.Where(elem => IsDateSuitable(elem.Flight.FlightDate.Value))
.Include(elem => elem.Flight.Route)
.ToListAsync();
//...
return true;
}
、ライン.Where(async elem => await IsGoodPersonForSchedule(elem, usedStaff, position))
で私がエラーを持っている:
Cannot convert async lambda expression to delegate type
Func<Person, bool>
. An async lambda expression may return void, Task or Task, none of which are convertible toFunc<Person, bool>
.
私は解決策として、これを見つけた: .Where(elem => IsGoodPersonForSchedule(elem, usedStaff, position).Result)
しかし、それはとても奇妙で、非同期メソッドのResultプロパティを使用して...それエラーなしでコンパイルします。別の解決策を知っているかもしれませんか?
jsonにserializeするためのスレッドの作成について:うん、私はあなたに同意する、新しいスレッドを作成するには、現在のスレッドでこれを実行するよりも時間がかかるはずです。 linqのasyncに関する説明をありがとう。 – Evgeniy175