AsyncLocal, bağlam verilerini bir uyumsuz denetim akışı üzerinde tutmamıza izin verir. Aşağıdaki tüm özgeçmişler (başka bir iş parçacığında bile) ortam verisini (AsyncLocal on MSDN) alıp değiştirebileceğinden, bu oldukça düzgün.C# Async/Await: Görev oluşturma üzerine AsyncLocal <T> bağlamı bırakın
Bir alt görev için geçerli zaman uyumsuz yerel bağlamı 'bırakma' ve böylece yeni bir tane oluşturmanın bir yolu var mı? Yukarıdaki örnekte
AsyncLocal<string> Data = new AsyncLocal<string>();
Data.Value = "One";
Task.Factory.StartNew(() =>
{
string InnerValue = Data.Value;
//InnerValue equals to "One", I need it to be null.
});
iç görev payları dış kontrol akışı ile AsyncLocal bağlamı. Yeni bir bağlamı uygulamak için herhangi bir yolu var mı?
Güncelleme: Sorunumu burada çözmek için aşağıdaki (tamamen bağlamı sıfırlamadıysanız olmasına rağmen) bir cazibe gibi çalıştı:
AsyncLocal<string> Data = new AsyncLocal<string>();
Data.Value = "One";
Task.Factory.StartNew(() =>
{
Data.Value = null;
string InnerValue = Data.Value;
//InnerValue equals to null now.
});
string OuterValue = Data.Value; //Stays "one" even after the inner change.
Sorunuzu anlamıyorum. AsyncLocal'ın tüm amacı, async çağrıları arasındaki değeri aktarabilmektir ve verilerin akmaması mı istiyorsunuz? Öyleyse neden ilk etapta kullanıyorsun? –
Belki sadece eski düz kapsamı: '{string iç = ...} // iç tanımlanmamış burada' – csharpfolk