如何解决Xamarin Firestore 在经过一段时间后抛出 TimeoutException
需要一些关于如何在经过一段时间后抛出 TimeoutException 的建议,并且由于互联网丢失或任何其他意外问题,将数据发送到我的 fireStore 数据库的方法仍未完成。
使用 f-Miyu 的 Plugin.CloudFirestore 插件。
向服务器发送数据的代码。
public async Task BackUpNotes(UserNotes n)
{
await CrossCloudFirestore.Current.Instance.Collection(FTxts.Notes).Document(n.ID)
.SetAsync(new {
n.ID,n.Title,n.Details,n.CreatedDate,n.Isstarred,n.LastEditDate,});
}
//调用这里
private async Task BackUpNotes()
{
if (IsBusy) return;
IsBusy = true;
int c = 0;
var answer = await Application.Current.MainPage.displayAlert("Confirmation","Back Up Current Notes?","Yes","No");
if (answer)
{
foreach (var item in NotesCollection)
{
await CloudService.CS.BackUpNotes(item);
item.IsBackedUp = true;
await PlannerDataService.UpdateNote(item);
c++;
ToastMessageShort($"{c}/{NotesCollection.Count} Saved");
}
await GetNotes();
}
IsBusy = false;
}
解决方法
该库似乎不支持取消任务,您可以使用一个技巧来添加超时,例如:
var delayTask = Task.Delay(5000); // time out after 5 seconds
var backUpNotesTask = BackUpNotes(notes);
await Task.WhenAny(new [] { delayTask,backUpNotesTask });
当这些任务中的第一个完成时,此代码将继续。这可能是“超时”delayTask
或 backUpNotesTask
。
如果您想在第一个返回的任务不是 backUpNotesTask
时抛出异常,您可以检查 WhenAny
的结果:
var winner = await Task.WhenAny(...
if (winner == delayTask)
throw new TimeoutException();
请记住,这并不意味着 BackUpNotes
不会稍后完成
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。