2013-10-20 23 views
5

System 158.Tasks.Parallel.ForEach'ı, Application 158'i kullanarak taşınabilir sınıf kitaplığı projesinde kullanmaya çalışıyorum (Windows Store Uygulamaları için .NET'i hedefleme, .NET..NET taşınabilir altkümesiyle System.Threading.Tasks.Parallel'i kullanma

var list = new List<int> {1, 2, 3, 4}; 
int whoCares; 
System.Threading.Tasks.Parallel.ForEach(list, (item) => whoCares += item); 

derleyici o "türü veya ad diyor ki: Bu gibi bir kod yazarken Framework 4.5, Silverlight 5 ve Windows Phone 8) Visual Studio Professional 2012 Güncelleme 3.

koşuyorum 'System.Threading.Tasks' ad alanında 'Parallel' adı mevcut değil (Bu örnek kodun aslında thread-safe olmadığının farkındayım.)

MSDN'de Parallel.ForEach'in taşınabilir sınıf kitaplıkları için desteklendiğini doğruladım. ".NET Taşınabilir Altküme" referansımı taramak için Nesne Tarayıcısını kullanırsam, System.Threading.Tasks.Parallel, ".NET Taşınabilir Altkümesi" bileşenini görürsünüz ve gerçekten System.Threading.Tasks için tanımlarım var .Parallel.ForEach.

PCL projemde Parallel.ForEach'a erişmek için ne yapmam gerekiyor?

cevap

7

başlıklı bölümde Portable Class Libraries MSDN giriş, Desteklenen Türler ve Üyeleri üyesi Taşınabilir Sınıf Kütüphaneleri için desteklenip desteklenmediğini sadece belirlemek için belirli bir MSDN yardım konusunun Sürüm Bilgileri bölümüne bakın belirtir . Alternatif olarak, bir sınıf için üye tablosuna bakarken, PCL için desteklenen üyelerin yanında belirli bir simge görünür.

Yani, örneğin, System.Threading.Tasks Namespace belgelerinde, Parallel için tablo girişi o PCL için desteklenir belirten simgeyi var. Parallel.ForEach için başvuru belgelerinde "Desteklenen: Taşınabilir Sınıf Kitaplığı" yazan bir Sürüm Bilgileri bölümü vardır.

Bu bilginin yeterince ayrıntılı olmadığı ortaya çıkıyor. Daha ayrıntılı bilgiler Microsoft tarafından yayımlanmıştır, ancak bildiğim kadarıyla yalnızca bir Excel elektronik tablosu biçiminde kullanılabilir. Başlangıçta Microsoft blog makalesi How to Make Portable Class Libraries Work for You'dan bağlanmıştır. Microsoft tarafından sağlanan kısaltılmış URL, https://skydrive.live.com/view.aspx?resid=8A7FB4A4B32FB2C9!180&app=Excel&authkey=!AHaBmLAhQ49YCI0

Bu, 1.1MB boyutunda bir e-tablodur. Ne yazık ki, bu e-tabloda Parallel.ForEach'in .NET 4.5 için desteklendiği, ancak SL5 veya WP8 tarafından desteklenmediği gösterilmiştir.

de (MIT lisansı altında açık kaynak şimdi otomatik grafik düzeni kütüphanesinde kullanılan), Microsoft Research edinilebilir bir (çok) kısmi uygulama yoktur
+0

this post dayanarak: ve sonra basitçe hepsini bekleyin ft, projenizi analiz eden ve hangi platformları desteklediğini gösteren bir komut satırı aracı ve Visual Studio uzantısı olan .NET Taşınabilirlik Çözümleyicisi'ni yayımladı. Analizör, projenizde hangi kod satırlarının çeşitli platformlar tarafından desteklenmeyen APIS kullandığını gösterir. Duyuruyu http://blogs.msdn.com/b/dotnet/archive/2014/08/06/leveraging-existing-code-across-net-platforms.aspx adresinde bulabilirsiniz. Bu bir elektronik tabloya bakmaktan çok daha uygun görünüyor. –

+0

e-tablo şu anda çevrimiçi olarak gösterilmektedir (Excel Online aracılığıyla) ve oldukça hızlı bir şekilde gösterilmektedir, bu nedenle yerel olarak indirilmeye gerek yoktur –

0

el görevlerin listesini inşa edebileceğini Ağustos 2014'te, Microso yılında

int whoCares; 
var list = new List<int> {1, 2, 3, 4}; 
List<Task> myTasks = new List<Task>(); 

foreach (var item in list) // Artificially implement Parallel.For because this is a PCL 
{ 
    myTasks.Add(Task.Run(() => 
    { 
     // Task logic goes here 
     whoCares += item 
    })); 
} 

await Task.WhenAll(myTasks);