【问题标题】:Xamarin Firestore Throw TimeoutException After a Certain Time has Passed [duplicate]Xamarin Firestore 在经过一定时间后引发 TimeoutException [重复]
【发布时间】:2021-08-23 21:46:32
【问题描述】:

需要一些关于如何在经过一定时间后抛出 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;
    }

【问题讨论】:

    标签: c# firebase xamarin


    【解决方案1】:

    看起来该库不支持取消任务,您可以采取一些技巧来添加超时,例如:

    var delayTask = Task.Delay(5000); // time out after 5 seconds
    var backUpNotesTask = BackUpNotes(notes);
    
    await Task.WhenAny(new [] { delayTask, backUpNotesTask });
    

    当第一个任务完成时,此代码将继续。这可能是“超时”delayTaskbackUpNotesTask

    如果您想在第一个返回的任务不是backUpNotesTask 时抛出异常,您可以检查WhenAny 的结果:

    var winner = await Task.WhenAny(...
    
    if (winner == delayTask)
        throw new TimeoutException();
    

    请记住,这并不意味着BackUpNotes 不会稍后完成

    【讨论】:

    • 谢谢,现在就试试。?
    • 更新:是的,即使抛出异常,任务似乎仍然在后台运行 就像你说的那样,它会破坏目的,因为这意味着用户可能会将项目加倍发布到我的数据库,因为错误没有'不要取消 BackUpNotes。是否没有其他解决方法,所以一旦我的 TimeOutException 被抛出,我的 BackUpNotes 就会被取消。?
    • 不幸的是,作者在库中添加了某种取消机制。
    • 好的,非常感谢,会继续努力寻找解决方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多