SORU
21 Kasım 2012, ÇARŞAMBA


En iyi tüm arama ConfigureAwait için uygulama sunucu tarafı kodu

Ne zaman sunucu tarafı kodu (yani bazı ApiController) ve fonksiyonlar asenkron - dönüş Task<SomeObject> - kabul en iyi uygulama herhangi bir zamanda sizi bekliyor işlevleri Ara ConfigureAwait(false)?

İplik içerikleri özgün iş parçacığı içeriği arasında geçiş yapmak için önemi yok, çünkü daha fazla ölçülebilir olduğunu okumuştum. Ancak, ASP.NET Web Apı, eğer istek geliyor, bir iş parçacığı, ve sizi bekliyor bazı işlev ve Ara ConfigureAwait(false) olabilecek koymak farklı bir iş parçacığı olduğunda dönen final sonucu ApiController işlevi.

Aşağıda ben neden bahsettiğimi bir örnek hazırladım

public class CustomerController : ApiController
{
    public async Task<Customer> Get(int id)
    {
        // you are on a particular thread here
        var customer = await SomeAsyncFunctionThatGetsCustomer(id).ConfigureAwait(false);

        // now you are on a different thread!  will that cause problems?
        return customer;
    }
}

CEVAP
21 Kasım 2012, ÇARŞAMBA


This video by the ASP.NET team has the best information on using async on ASP.NET.

İplik içerikleri özgün iş parçacığı içeriği arasında geçiş yapmak için önemi yok, çünkü daha fazla ölçülebilir olduğunu okumuştum.

Bunun için sadece bir UI iş parçacığı "" geri. senkronize olduğu UI uygulamaları ile geçerlidir,

ASP.NET bu durum biraz daha karmaşık. async bir yöntem yürütme devam ettiğinde, ASP.NET iş parçacığı havuzu, bir iş parçacığı kapmak. Eğer bağlam ele geçir ConfigureAwait(false) kullanarak devre dışı bırakırsanız konu sadece yöntemi, doğrudan yürütmeye devam eder. Eğer bağlam yakalama özelliğini devre dışı değilse, o zaman bu iş parçacığı içeriği ve sonra yeniden girin istek yöntemi uygulamak için devam edecektir.

ConfigureAwait(false) ASP.NET; senin isteğin yeniden girme bağlamında tasarrufu sağlar, ama bu normalde çok hızlıdır kısmında ip atlama kaydetmiyor. ConfigureAwait(false)olabilireğer bir isteğin paralel işleme küçük bir miktar yapmak için çalışıyorsanız, bu yararlı olabilir, ama çok TRAFİK olduğu bu senaryoların çoğu için daha uygun.

Ancak, ASP.NET Web Apı, eğer istek geliyor, bir iş parçacığı, ve sizi bekliyor bazı işlev ve çağrı ConfigureAwait(false) olabilecek koymak farklı bir iş parçacığı olduğunda dönen nihai sonucu ApiController işlevi.

Aslında, sadece bir await bunu yapabilir. async yöntem ** 14, bir hit bir kereyöntemama . engellendi ^em>iplikiş parçacığı havuzu için döndürür. Bu yöntem devam etmek için hazır olduğunda, herhangi bir iş parçacığı iş parçacığı havuzu kaptı ve yöntemi devam ettirmek için kullanılır.

ConfigureAwait ASP.NET yapar tek fark bu iş parçacığı yöntemi çıkıldığında isteği bağlam girer mi.

MSDN article on SynchronizationContext async intro blog post benim daha fazla arka plan bilgi var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eric Magidson

    Eric Magidso

    4 Ocak 2009
  • 趣味そうこ♪

    趣味そう

    3 Mart 2010
  • nemoking of kinges

    nemoking of

    4 EYLÜL 2009