OrderBy 任务函数异步中的列表
OrderBy an list in a task function async
好的,我正在使用 orleans,我真正想做的就是在状态值之后对列表进行排序。我尝试这样做
public async Task SortEntries()
{
State.Entries.OrderBy(GetComparator);
}
private async decimal GetComparator(IEntryGrain x)
{
var a = await x.GetState();
return Task.FromResult(a);
}
但是我试图解决其中的两个错误。第一个 Task SortEntries 任务缺少 await 运算符,我想它可能仍然有效像这样排序条目
State.Entries.OrderBy((x) => x.GetState().Result.TotalPoints);
但是 GetState() 需要与 await 异步,但我不能在 orderBy 或排序上这样做。谁能把我推向正确的方向或遇到类似的事情
1.) OrderBy
不适用于 async/await。一个简单的解决方法是在 GetComparator
中使用 GetState 的结果 属性
private decimal GetComparator(IEntryGrain x)
{
var task = x.GetState();
task.Wait();
if(task.IsFaulted)
throw new Exception($"could not get the state: {task.Exception}", task.Exception);
return task.Result;
}
2.) OrderBy
return 只有一个 IEnumerable
,所以不会在那里订购。执行order by需要枚举一次。并且您需要 return 结果,因为 OrderBy
只是 return 一个有序列表,但不对列表本身进行排序。
public IList<IEntryGrain> SortEntries()
{
return State.Entries.OrderBy(GetComparator)
.ToList();
}
或者如果它是可写且线程安全的
,则将其写回属性
public void SortEntries()
{
State.Entries = State.Entries.OrderBy(GetComparator)
.ToList();
}
所以你得到:
public IList<IEntryGrain> SortEntries()
{
return State.Entries.OrderBy(GetComparator)
.ToList();
}
private decimal GetComparator(IEntryGrain x)
{
var task = x.GetState();
task.Wait();
if(task.IsFaulted)
throw new Exception($"could not get the state: {task.Exception}", task.Exception);
return task.Result;
}
好的,我正在使用 orleans,我真正想做的就是在状态值之后对列表进行排序。我尝试这样做
public async Task SortEntries()
{
State.Entries.OrderBy(GetComparator);
}
private async decimal GetComparator(IEntryGrain x)
{
var a = await x.GetState();
return Task.FromResult(a);
}
但是我试图解决其中的两个错误。第一个 Task SortEntries 任务缺少 await 运算符,我想它可能仍然有效像这样排序条目
State.Entries.OrderBy((x) => x.GetState().Result.TotalPoints);
但是 GetState() 需要与 await 异步,但我不能在 orderBy 或排序上这样做。谁能把我推向正确的方向或遇到类似的事情
1.) OrderBy
不适用于 async/await。一个简单的解决方法是在 GetComparator
private decimal GetComparator(IEntryGrain x)
{
var task = x.GetState();
task.Wait();
if(task.IsFaulted)
throw new Exception($"could not get the state: {task.Exception}", task.Exception);
return task.Result;
}
2.) OrderBy
return 只有一个 IEnumerable
,所以不会在那里订购。执行order by需要枚举一次。并且您需要 return 结果,因为 OrderBy
只是 return 一个有序列表,但不对列表本身进行排序。
public IList<IEntryGrain> SortEntries()
{
return State.Entries.OrderBy(GetComparator)
.ToList();
}
或者如果它是可写且线程安全的
,则将其写回属性public void SortEntries()
{
State.Entries = State.Entries.OrderBy(GetComparator)
.ToList();
}
所以你得到:
public IList<IEntryGrain> SortEntries()
{
return State.Entries.OrderBy(GetComparator)
.ToList();
}
private decimal GetComparator(IEntryGrain x)
{
var task = x.GetState();
task.Wait();
if(task.IsFaulted)
throw new Exception($"could not get the state: {task.Exception}", task.Exception);
return task.Result;
}