我有一个操作定义为:
Action CurrentDxList;
Run Code Online (Sandbox Code Playgroud)
最初,我将其用作:
private void test()
{
CurrentDxList = MakeAllDxList;
CurrentDxList();
}
Run Code Online (Sandbox Code Playgroud)
在哪里
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();
}
Run Code Online (Sandbox Code Playgroud)
然而,MakeAllDxList() 最好用异步定义为:
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();
}
Run Code Online (Sandbox Code Playgroud)
现在会导致以下错误:
任务 MakeAllDxList() 的返回类型错误。
那么是否可以为一个动作分配一个可等待的值呢?这是怎么做到的?任何想法都是非常受欢迎的。
当然,我可以将 MakeAllDxList() 的签名更改为
private async void MakeAllDxList()
Run Code Online (Sandbox Code Playgroud)
但这样我就会失去异步任务的所有优点。
您需要将 更改Action为 a Func<Task>,这是新的类型定义。
PS 不要忘记等待CurrentDxList代表
private async Task test()
{
CurrentDxList = MakeAllDxList;
await CurrentDxList();
}
Run Code Online (Sandbox Code Playgroud)
您还需要将调用者更新test为异步。