Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET Framework 4.6.1, kendi araç kutusunda, koleksiyonlar arasında yinelemeye olanak tanıyan ParallelForEach<T>, IEnumerable<T> dahil olmak üzere bir dizi Denetim Akışı etkinliği içerir.
ParallelForEach<T> özelliğinin Values türünde IEnumerable<T>olmasını gerektirir. Bu, kullanıcıların arabirimi uygulayan IEnumerable<T> veri yapıları üzerinde yinelemesini engeller (örneğin, ArrayList). Genel olmayan sürümü ParallelForEach<T> , koleksiyondaki değer türlerinin uyumluluğunu sağlamak için daha fazla çalışma zamanı karmaşıklığı pahasına bu gereksinimin üstesinden gelir.
NonGenericParallelForEach örneği, genel ParallelForEach<T> olmayan bir etkinliği ve tasarımcısını nasıl uygulayacaklarını gösterir. Bu etkinlik, ArrayListüzerinde yineleme yapmak için kullanılabilir.
ParallelForEach etkinliği
C#/Visual Basic foreach deyimi bir koleksiyonun öğelerini numaralandırır ve koleksiyonun her öğesi için eklenmiş bir deyim yürütür. WF eşdeğeri etkinlikler ForEach<T> ve ParallelForEach<T>'dir.
ForEach<T> etkinliği, değerlerin listesini ve bir gövdeyi içerir. Çalışma zamanında, liste yinelenir ve gövde listedeki her değer için yürütülür.
ParallelForEach<T>, CompletionConditionParallelForEach<T> döndürdüğünde etkinliğin CompletionCondition erken tamamlanmasını sağlayan bir true öğesine sahiptir.
CompletionCondition her yineleme tamamlandıktan sonra değerlendirilir.
Çoğu durumda, kullanıldığı senaryoların çoğunu kapsadığından ve derleme zamanında tür denetimi sağladığından etkinliğin genel sürümü tercih edilen çözüm olmalıdır. Genel olmayan sürüm, genel olmayan IEnumerable arabirimi uygulayan türler arasında yinelemek için kullanılabilir.
Sınıf tanımı
Aşağıdaki kod örneği, genel ParallelForEach olmayan bir etkinliğin tanımını gösterir.
[ContentProperty("Body")]
public class ParallelForEach : NativeActivity
{
[RequiredArgument]
[DefaultValue(null)]
InArgument<IEnumerable> Values { get; set; }
[DefaultValue(null)]
[DependsOn("Values")]
public Activity<bool> CompletionCondition
[DefaultValue(null)]
[DependsOn("CompletionCondition")]
ActivityAction<object> Body { get; set; }
}
Gövde (isteğe bağlı)
ActivityAction türündeki Object, koleksiyondaki her öğe için yürütülür. Her bir öğe, bağımsız değişken özelliği ile gövdeye aktarılır.
Değerler (isteğe bağlı)
Üzerinde yinelenen öğeler koleksiyonu. Koleksiyonun tüm öğelerinin uyumlu türlerde olup olmadığını denetlemek, çalışma zamanında gerçekleştirilir.
Tamamlama Koşulu (isteğe bağlı)
CompletionCondition Özelliği, herhangi bir yineleme tamamlandıktan sonra değerlendirilir. Eğer true olarak değerlendirilirse, zamanlanmış bekleyen yinelemeler iptal edilir. Bu özellik ayarlanmazsa, Dal koleksiyonundaki tüm etkinlikler tamamlanana kadar yürütülür.
ParallelForEach kullanma örneği
Aşağıdaki kod, bir uygulamada ParallelForEach etkinliğinin nasıl kullanılacağını gösterir.
string[] names = { "bill", "steve", "ray" };
DelegateInArgument<object> iterationVariable = new DelegateInArgument<object>() { Name = "iterationVariable" };
Activity sampleUsage =
new ParallelForEach
{
Values = new InArgument<IEnumerable>(c=> names),
Body = new ActivityAction<object>
{
Argument = iterationVariable,
Handler = new WriteLine
{
Text = new InArgument<string>(env => string.Format("Hello {0}", iterationVariable.Get(env)))
}
}
};
ParallelForEach tasarımcısı
Örnek için etkinlik tasarımcısı, yerleşik ParallelForEach<T> etkinlik için sağlanan tasarımcıya benzer şekilde görünür. Tasarımcı, Örnekler, Genel Olmayan Etkinlikler kategorisindeki araç kutusunda görünür. Tasarımcı, araç kutusunda ParallelForEachWithBodyFactory olarak adlandırılır, çünkü etkinlik, düzgün yapılandırılmış IActivityTemplateFactory bir ile etkinliği oluşturan bir ActivityAction araç kutusunda kullanıma sunar.
public sealed class ParallelForEachWithBodyFactory : IActivityTemplateFactory
{
public Activity Create(DependencyObject target)
{
return new Microsoft.Samples.Activities.Statements.ParallelForEach()
{
Body = new ActivityAction<object>()
{
Argument = new DelegateInArgument<object>()
{
Name = "item"
}
}
};
}
}
Örnek çalıştırmak için
Seçtiğiniz projeyi çözümün başlangıç projesi olarak ayarlayın.
CodeTestClient , kodu kullanarak etkinliğin nasıl kullanılacağını gösterir.
DesignerTestClient , tasarımcı içindeki etkinliğin nasıl kullanılacağını gösterir.
Projeyi derleyin ve çalıştırın.