Изменение цвета метки chart.js в зависимости от значения

Удивленный никто не упомянул об этом:

public Task BlahAsync()
{
    // ...
}

int result = BlahAsync().GetAwaiter().GetResult();

Не так хорошо, как некоторые из других методов здесь, но он имеет следующие преимущества:

  • )
  • не будет содержать никаких исключений, которые были выбраны в AggregateException (например Result)
  • работает как для Task, так и для Task ( попробуйте сами! )

Кроме того, поскольку GetAwaiter утиный, это должно работать для любого объекта, который возвращается из async (например, ConfiguredAwaitable или YieldAwaitable), а не только Задачи.


edit: Обратите внимание, что этот подход (или использование .Result) возможен в тупик, если вы не убедитесь добавлять .ConfigureAwait(false) каждый раз, когда вы ожидаете, для всех асинхронных методов, которые могут быть достигнуты с BlahAsync() (а не только с теми, которые он вызывает напрямую). Объяснение .

// In BlahAsync() body
await FooAsync(); // BAD!
await FooAsync().ConfigureAwait(false); // Good... but make sure FooAsync() and
                                        // all its descendants use ConfigureAwait(false)
                                        // too. Then you can be sure that
                                        // BlahAsync().GetAwaiter().GetResult()
                                        // won't deadlock.

Если вы слишком ленивы, чтобы добавить .ConfigureAwait(false) повсюду, и вы не заботитесь о производительности, вы также можете сделать

Task.Run(() => BlahAsync()).GetAwaiter().GetResult()

0
задан 7029279 2 March 2019 в 05:54
поделиться