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
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.
Delphi XE için SABUN sunucu ve istemci...
Nasıl bir derleme .Yerel kodu için NET...
Sunucu tarafı uyumsuz başlatıldı react...
Çevrimdışı depolama için Görüntü Veri ...
Nasıl bir PNG görüntü sunucu tarafı ku...