在Portable类库中实现带退避的重试

时间:2015-12-08 08:23:36

标签: c# .net multithreading portable-class-library windows-8.1-universal

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

用这个假设实现我的PCL库的正确方法是什么?是否有Polly 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 } 以外的重试Purose的库?

App.xaml.xs

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;
    }

PCL.cs

{{1}}

0 个答案:

没有答案