2016-06-02 5 views
0

Я использую DotNetCircuitBreaker и пытается вызвать асинхронной Metod как этотКак сделать асинхронной вызов DotNetCircuitBreaker

private async void button1_Click(object sender, EventArgs e) 
{ 
    var circuitBreaker = new CircuitBreaker.Net.CircuitBreaker(
    TaskScheduler.Default, 
    maxFailures: 3, 
    invocationTimeout: TimeSpan.FromMilliseconds(100), 
    circuitResetTimeout: TimeSpan.FromMilliseconds(10000)); 

    //This line gets the error... Definition looks like this 
    //async Task<T> ExecuteAsync<T>(Func<Task<T>> func)  
    var result = await circuitBreaker.ExecuteAsync(Calc(4, 4)); 
} 

private async Task<int> Calc(int a, int b) 
{ 
    //Simulate external api that get stuck in some way and not throw a timeout exception 
    Task<int> calc = Task<int>.Factory.StartNew(() => 
    { 
    int s; 
    s = a + b; 
    Random gen = new Random(); 
    bool result = gen.Next(100) < 50 ? true : false; 
    if (result) Thread.Sleep(5000); 
    return s; 
    }); 

    if (await Task.WhenAny(calc, Task.Delay(1000)) == calc) 
    { 
    return calc.Result; 
    } 
    else 
    { 
    throw new TimeoutException(); 
    } 
} 

Аргумент 1: не удается преобразовать из System.Threading.Tasks.Task «ИНТ» в системе .Func «System.Threading.Tasks.Task»

Как исправить мой метод известково работы с

ответ

0

Это выглядит как CircuitBreaker.ExecuteAsync ожидает параметр с типом Func<Task<T>>. То, что вы поставили, - Task<T>.

Чтобы исправить это, Вы можете использовать лямбда-выражения, как

var result = await circuitBreaker.ExecuteAsync(() => Calc(4, 4)); 
0

Я согласен с Дирком, так как вы в настоящее время не придерживаясь ожидаемой подписи параметра. С другой стороны, рассмотрели ли вы просмотр выключателя, предоставленного Polly library? Он довольно зрелый и имеет множество функциональных возможностей, спускающихся по щуке в соответствии с его roadmap, включая некоторые функции, которые соответствуют или превосходят функциональность, предоставляемую библиотекой выключателей Hystrix Netflix (java).

Смежные вопросы