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

  • Nickcidious

    Nickcidious

    6 HAZİRAN 2011
  • olinerd

    olinerd

    23 AĞUSTOS 2007
  • SunsetTrance

    SunsetTrance

    20 EYLÜL 2008