我有一个动作定义为:

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()


但是那样我就会失去异步Task的所有优势。

最佳答案

您需要将Action更改为Func<Task>,这是新的类型定义。

附言不要忘记等待CurrentDxList代表

private async Task test()
{
 CurrentDxList = MakeAllDxList;
 await CurrentDxList();
}


您还需要更新调用test的任何人,以使其也异步。

09-25 19:33