我是C#异步/等待方面的新手,在尝试使用异步方法时遇到了一些问题。 我有一个集合:
private IList<IContactInfo> _contactInfoList
还有一个异步方法:
public async Task<IList<IContactInfo>> SelectContacts()
{
_contactInfoList = new List<IContactInfo>();
ContactsSelector selector = new ContactsSelector();
selector.ShowPicker();
selector.ContactsSelected += (object sender, ContactsSelectorEventArgs e) =>
{
this._contactInfoList = e.Contacts;
};
return _contactInfoList;
}
联系人选择器是一个弹出式用户控件,允许从手机中选择一些联系人,并在点击“确定”按钮后触发ContactsSelected
事件。我需要从事件参数e.Contacts
中获取所选联系人列表,并在上述提到的SelectContacts()
异步方法中返回该列表。这里有一个问题:我的方法在ContactsSelected
事件完成之前就已经返回了空列表_contactInfoList
。我知道即使使用async / await,这个问题也不会解决,而且在普通方法中也会存在这个问题,但我只需要让该方法等待事件处理结果。
TrySetResult
而不是SetResult
?在事件处理程序中添加try/catch
并在try
中调用tcs.SetResult
,在catch
中调用tcs.SetException
是否是个好主意? - avo