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

  • Garrett Müller

    Garrett Mül

    26 HAZİRAN 2009
  • Stanislav Petrov

    Stanislav Pe

    7 ŞUBAT 2009
  • UKF

    UKF

    2 Aralık 2009