SORU
8 Ocak 2013, Salı


Neden CancellationToken CancellationTokenSource ayrıdır?

Neden bir gerekçe arıyorum .NET CancellationToken yapı CancellationTokenSource sınıf için ek olarak kullanılmaya başlandı. AnlıyorumnasılAPI kullanılır, ama aynı zamanda anlamak istiyorumnedenbu şekilde tasarlanmıştır.

I. e., neden var:

var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);

...
public void SomeCancellableOperation(CancellationToken token) {
    ...
    token.ThrowIfCancellationRequested();
    ...
}

doğrudan CancellationTokenSource geçirmeden yerine gibi:

var cts = new CancellationTokenSource();
SomeCancellableOperation(cts);

...
public void SomeCancellableOperation(CancellationTokenSource cts) {
    ...
    cts.ThrowIfCancellationRequested();
    ...
}

Bu performans optimizasyonu iptal durumunu denetler daha sık etrafında token geçen daha ılımlı gerçeğine dayanmaktadır?

Bu CancellationTokenSource izlemek ve CancellationTokens güncelleştirmek ve her token için İptal onay alan yerel bir erişim mi?

Her iki durumda da hiçbir kilitleme ile uçucu bir bool yeterli olduğu göz önüne alındığında, ben hala daha hızlı olurdu neden göremiyorum.

Teşekkürler!

CEVAP
8 Ocak 2013, Salı


Ama semantik olanlar teknik sebepler ayrıdır. Eğer İLSpy altında CancellationToken uygulanması bakarsanız, sadece CancellationTokenSource etrafında sarıcı (ve böylece farklı bir referans etrafa daha performans-bilge) bulabilirsiniz.

Bir yöntem CancellationToken, hala iptal olduğunu sadece sen bilirsin. bir geçirdiğinizde şey daha tahmin edilebilir yapmak için işlevsellik bu ayrılık sağladıkları: Tabii, bu yöntem hala TaskCancelledException ama CancellationToken kendisi ve diğer yöntemler, aynı başvuru token -- güvenli kalır atabilirdi.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fr. Eckle Studios

    Fr. Eckle St

    29 Kasım 2006
  • Jonah Penna

    Jonah Penna

    11 EYLÜL 2005
  • PremiumBeat.com - Royalty Free Music

    PremiumBeat.

    16 Kasım 2008