我将Action定义为:
Action CurrentDxList;
最初,我用它作为:
private void test()
{
CurrentDxList = MakeAllDxList;
CurrentDxList();
}
其中
private void MakeAllDxList()
{
var dx = MedicalClient.GetAllDx((int)Patient.Patient_Recid, Patient.tservice);
_dxlist = dx.OrderBy(o => o.Cdesc);
DxList = new ObservableCollection<DiagnosisDetail>(iDxDetail);
ListCount = DxList.Count();
}
但是,MakeAllDxList()最好使用async定义:
private async Task MakeAllDxList()
{
var dx = await MedicalClient.GetAllDxAsync((int)Patient.Patient_Recid, Patient.tservice);
_dxlist = dx.OrderBy(o => o.Cdesc);
DxList = new ObservableCollection<DiagnosisDetail>(iDxDetail);
ListCount = DxList.Count();
}
现在导致以下错误:
任务MakeAllDxList()的返回类型错误。
那么可以为行动分配一个等待吗?这是怎么做到的?任何想法都是最受欢迎的。
当然,我可以将MakeAllDxList()的签名更改为
private async void MakeAllDxList()
但是我会失去异步任务的所有优点。
答案 0 :(得分:4)
您需要将Action
更改为Func<Task>
,这是新的类型定义。
P.S。别忘了等待CurrentDxList
代表
private async Task test()
{
CurrentDxList = MakeAllDxList;
await CurrentDxList();
}
您需要更新调用test
的人也是异步。
答案 1 :(得分:1)
private async Task MakeAllDxList()
{
var dx = await MedicalClient.GetAllDxAsync((int)Patient.Patient_Recid, Patient.tservice);
在上面的代码中,“var dx = await”模式称为闭包。如果将断点设置为该语句之后的第一行代码,则会看到dx的值为GetAllDxAsync方法返回的类型。因为该方法被命名为“Getxyz”,暗示它是某种类型的再生物数据。要退出MakeAllDxList方法,需要做两件事1)将Task的返回类型更改为Task<dxType>
,其中dxType是变量dx的类型。 2)在var dx行之后,输入“return dx”的声明。