1

我正在开发一个protable class library(PCL). 这样做的目的PCL是注册推送通知通道并启动MQTT与服务器的连接。问题是PCL必须能够检测到瞬态连接故障并通过退避重试。我找到了一个Polly为此目的而调用的库。PCL有一个静态方法(Init),我从方法中Windows Universal 8.1 app调用它。OnLaunched我希望 PCL 不会阻止UI Thread. 我不能使用ConfigureAwait(false)inOnLaunched方法,因为只能UI Thread访问与 . 相关的元素UI。我认为当前Polly的异步实现块UI Thread

用这个假设实现我的 PCL 库的正确方法是什么?是否有用于重试 Purose 的库PCLexcept Polly

应用程序.xaml.xs

    protected override async void OnLaunched(LaunchActivatedEventArgs e)
    {
        // some code

        await Notifier.Init(some parameters);

        // if I use ConfigureAwait(false) I see exceptions in rest of method
        // some code
    }

PCL.cs

public sealed class Notifier
{

    public static async Task<bool> Init(some parameters)
    {

        Policy policy = Policy.Handle<NullReferenceException>().WaitAndRetryAsync(5,
                               retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (exception,timeSpan) =>
                               {
                                   Debug.WriteLine(exception);
                                   Debug.WriteLine(timeSpan);
                               });

        policy.ExecuteAsync(() => instance.OpenChannelAndUploadAsync(instance.ServerUrl));

        await instance.InitiateMqtt();


        return true;
    }
4

0 回答 0