2015-06-05 21 views
6

Bu durum, Nancy'nin bir iptal isteği işleyicisini sağlanan iptal işlemi ile ilgili ne zaman ve ne zaman iptal edebileceğini anlamakla ilgilidir.Async İstek İşleyicileri için Nancy'nin İptal İşlemi nereden geliyor ve ne zaman iptal ediliyor?

Temel olarak, merak ettiğim şey, belirtecin hangi koşullarda olduğudur.IsCancellationRequested true değerine ayarlanmış - bu bir yerde belgelenmiş veya açıklanmış mı?

Nancy, async işleyicilerini "zaman" içinde "hiç" geri dönmeyecek şekilde nasıl işler? Ve zamanla ilgili olarak: İşleyicilerin iptal edilmesinin ardından bir zaman aşımı/limiti var mı?

cevap

0

Bu, iptal jetonlarının güzelliğidir, setini nasıl tanımlayacağınızı veya umursamadığınızı bilmeniz gerekmez. Bu size jetonu veren kişiye kalmış. Simgeye bakıp, ayarlanıp ayarlanmadığına bakın.

CancellationToken kabul eden bir yöntemi çağırıyorsanız ve istediğiniz zaman ayarlayabileceğiniz bir yöntem oluşturmayı istiyorsanız, bir simge oluşturmak için CancellationTokenSource kullanıyor olmalısınız; Oluşturduğu belirteci iptal etmek için CTS'yi kullanabilir veya belirli bir süre sonra iptal edilmesini ayarlayabilirsiniz.

+0

hepsi bu kadar iyidir - kodun kendisi ne zaman ve nasıl yapıldığını umursamıyor - ne zaman ve ne kadar çabuk istenirse iptal eder. Dediğim gibi, Nancy'nin bunu nasıl ve ne zaman yaptığını anlamak isteyen benim. –

+0

@ JörgB. Sen yapamazsın. * Sizden kasıtlı olarak gizlenmiş * arayan kişinin iptal belirtecini iptal etme niyetinde olan belirli mekanizmayı bilmek. Nasıl * * bilemezsin? Yapabileceğiniz tek şey, belirtecin API'sinde sağlanan, yani şu anda iptal edilip edilmediğini belirlemek veya iptal edildiğinde işlenecek bir olay işleyicisini kaydettirmektir. Bu kadar. Başka bir şey istiyorsanız bunun için kendi mekanizmanızı oluşturmanız gerekir. – Servy

+5

teşekkürler ama sen sorduğum soru eksik - Ben CancellationTokens genel kavramı hakkında konuşmak veya merak etmiyorum. Dediğim gibi, bu iyi anlaşıldı. Nancy'yi merak ediyorum. Ve async işleyicileri. Bu yanlış, garip bir yöne dönüyor. Ben (kişi, benim kodum değil) Nancy ve async işleyicilerinin mekaniği ile ilgileniyorum. Birisi biliyor ve Asp.Net 1: 1 iletilir diyorsa .. Mutluyum. Daha fazla varsa, bununla ilgileniyorum. –

1

Her CancellationToken bir yerden geliyor ve bir yerde CancellationTokenSource var.

CancellationTokenSource.Cancel'i aradığınızda, oluşturduğu her belirteç işaretlenir.


Eğlenceli gerçek: CancellationToken bir işleve geçmek ya da yeni bir kopyasını yapan bir değişkene atamayı her zaman anlamına gelen bir yapı vardır. Kaynak, bu kopyaların tümünü takip edemediğinden, bir CancellationToken.IWasCancelled etkinliğimiz olamaz. Bunun yerine, IsCancellationRequested'i çağırdığınızda, belirtecin kaynağını sorması gerekir.

ref: https://msdn.microsoft.com/en-us/library/system.threading.cancellationtokensource(v=vs.110).aspx


Yani geri Nancy olacak, CancellationTokenSource için kaynak kodlarını aramak ve size cevap bulacaksınız. İşte gördüğüm tek kişi.

https://github.com/NancyFx/Nancy/blob/8a29b0495bfac4806536327c4d78de1ee59bd513/src/Nancy/NancyEngine.cs

3

Bu eski bir soru olduğunu biliyorum ama senin de aynı durumdaydım ve ben (Nancy.Owin kullanarak) uygulamanızı barındırmak için Owin kullanırken en azından eğer bir cevap buldum.

CancellationToken, IOwinRequest.CallCancelled (Nancy source code ve used here) aracılığıyla Owin'den doğrudan gelir. Bu belirteç, istek iptal edilirse Owin tarafından ayarlanabilir (örneğin, HTTP bağlantısının zorla kapatılmasıyla).

İlgili konular