2016-03-21 16 views
6

Bir ASP MVC web sitesinde otomatik globalleştirme kullanıyorum.Paralel bir blokta iş parçacığı kültürü nasıl doğru olarak alınır?

public ActionResult Index() 
{ 
    // Thread.CurrentThread.CurrentCulture is automatically set to "fr-FR" 
    // according to the requested "Accept-Language" header 

    Parallel.Foreach(ids, id => { 
     // Not every thread in this block has the correct culture. 
     // Some of them still have the default culture "en-GB" 
    }) ; 

    return View() 
} 

paralel blok kültürünü miras yapmak için en iyi yolu nedir: Bir paralel blok ulaşana kadar iyi çalışır? bunun dışında çözeltisinden:

public ActionResult Index() 
{ 
    var currentCulture = Thread.CurrentThread.CurrentCulture ; 

    Parallel.Foreach(ids, id => { 
     // I don't know if it's threadsafe or not. 
     Thread.CurrentThread.CurrentCulture = currentCulture ; 

    }) ; 

    return View() 
} 
+0

, bunlardan biri, çünkü talebi kültürünü vardır görev dizgisi. Diğerleri ise ne olursa olsun iş parçacığı havuzu davranışını takip etmelidir (hiç bulamadım). – usr

cevap

3

Kendi Parallel.ForEach taşıma iplik kültürü oluşturabilir: Sonra

public static class ParallelInheritCulture 
{ 
    public static ParallelLoopResult ForEach<T>(IEnumerable<T> source, Action<T> body) 
    { 
     var parentThreadCulture = Thread.CurrentThread.CurrentCulture; 
     var parentThreadUICulture = Thread.CurrentThread.CurrentUICulture; 

     return Parallel.ForEach(source, e => 
     { 
      var currentCulture = Thread.CurrentThread.CurrentCulture; 
      var currentUICulture = Thread.CurrentThread.CurrentUICulture; 

      try 
      { 
       Thread.CurrentThread.CurrentCulture = parentThreadCulture; 
       Thread.CurrentThread.CurrentUICulture = parentThreadUICulture; 

       body(e); 
      } 
      finally 
      { 
       Thread.CurrentThread.CurrentCulture = currentCulture; 
       Thread.CurrentThread.CurrentUICulture = currentUICulture; 
      } 
     }); 
    } 
} 

: Muhtemelen

ParallelInheritCulture.Foreach(ids, id => { 
    // Whatever 

}) ; 
+0

Kültürü paralel olarak geri döndürme ihtiyacı nedir? – Vipresh

İlgili konular