2

Я понимаю, что вызов ConfigureAwait (false) в ожидаемой задаче иногда имеет преимущество в производительности, поскольку он предотвращает ненужное возвращение к исходному SynchroniZationContext.Действительно ли Task.ConfigureAwait (false) в последней строке метода влияет на что-либо?

Например:

async Task Something() 
{ 
    // Let's say I'm on the UI context 
    //... 
    await AnotherTask.ConfigureAwait(false); 

    // Code here is no longer running on the UI context. 
    // It runs in a thread pool synchronization context (i.e. null). 
} 

Мой вопрос заключается в следующем: Если вызов задачи находится на последней строке метода, и мы пропускаем ConfigureAwait (ложь), это компилятор достаточно умен, чтобы предотвратить ненужное вернуться к исходному контексту?

async Task Something() 
    { 
     // Let's say I'm on the UI context 
     //... 
     await AnotherTask; // Dropped -> .ConfigureAwait(false);   
    } 

Будет ли исполнения пенальти или потенциала тупикового можно здесь, несмотря на то, что нет ничего в методе после вызова ЖДЕТ?

ответ

4

является компилятором достаточно умным, чтобы предотвратить ненужное возвращение в исходный контекст?

Пока еще нет.

Возможна ли штрафная ставка исполнения или потенциальный тупик здесь, даже если в процессе нет ничего полезного после вызова?

Да.

+0

Спасибо, Стивен за ваш четкий и точный ответ. Я также просто купил ваш Concurrency в C# Cookbook от Amazon, чтобы уточнить мои знания :) – Paymon

+0

Могу ли я пригласить вас также на этот вопрос :) http://stackoverflow.com/questions/41908593/is-there-any-way -в-см-в-полный стек-след-через-несколько-потоков? noredirect = 1 # comment70998869_41908593 – Paymon

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

  • Нет связанных вопросов^_^