سؤال

أثناء حفر أعمق في أحدث إصدار من F # حاولت أن أتفاعل مع بلينك. لقد لاحظت، مع ذلك، أن الاثنين لا يلعبان لطيفة جدا معا رمز الحكمة. في الواقع، لا يبدو أنه من الممكن كتابة التعليمات البرمجية مثل ما يلي:


open System.Linq
let someArray = [|"abc"; "def"|]
someArray.AsParallel().Count(new Func<_,_>(fun s -> s.Length = 3))

نظرا لأن طرق الإرشاد المتنزى الواردة في فئة System.linq.ParallElenumerable لم تكن قد تم التقاطها بواسطة F #.
لن أتفاجأ إذا لم يكن هناك دعم لأساليب الإرشاد على الإطلاق، ولكن بما يمكنني الوصول إلى طريقة Somearray.count Extension المحددة ل iEnumerable وأتساءل لماذا لا يمكنني الوصول إلى من PLINQ.
هل فاتني شيء؟
هل هذا قيود F #؟ إذا كان الأمر كذلك، فهل ذلك عن طريق التصريح؟ إذا لم يكن كذلك، فهل سيتم تناوله في إصدار مستقبل؟

هل كانت مفيدة؟

المحلول

إذا لم تستخدم بعد .NET 4.0، فيمكنك كتابة ذلك على النحو التالي:

#r "System.Threading"
open System.Linq

let someArray = [|"abc"; "def"|]

someArray.AsParallel<string>()
|> Seq.filter (fun s -> s.Length = 3)
|> Seq.length

تعال .NET 4.0، يمكنك فقط كتابة:

let someArray = [|"abc"; "def"|]

someArray
|> Array.Parallel.filter (fun s -> s.Length = 3)
|> Array.length

F # تفضل استخدام وحدة SEQ عبر طرق تمديد LINQ. هناك بعض وظائف المساعد المتاحة، ومع ذلك، في جمعية FSharp.powerpack.linq.

نصائح أخرى

إذا كنت أتذكر بشكل صحيح، فإن الحصول على بلينك للعمل بشكل جيد مع F # هو على قائمة المهام في فريق التطوير في Microsoft، على الرغم من أنني لست متأكدا من أنه سيظهر في .NET 4.0. F # هل لديك سير العمل غير المتزامن, ، مما يشبه إلى حد كبير بلينك (باستثناء أنها تعتمد على قائمة الفهم بدلا من ذلك، وهي الطريقة الوظيفية القياسية لفعل الأشياء). لا يمكنني العثور على المقال الذي يذكر دعم أفضل في F # للملحقات المتوازية (Plinq / TPL)، لذلك لا اقتبسني عليه، لكنني متأكد من أنني رأيت ذلك في مكان ما.

بصرف النظر عن صفحة MSDN، هذه المقالة يبدو وكأنه مقدمة جيدة للموضوع.

هناك ايضا هذه سلسلة بلوق (باستخدام Plinq في F #قد يكون ذلك مفيدا لقراءة إذا كنت تفضل استخدام Plinq على سير عمل ASYNC لا يزال.

طرق التمديد هي مجرد احصائيات تأخذ الكائن كمعلمة الأولى، لذلك يجب أن تكون قادرا على الاتصال به

ParallelEnumerable.AsParallel(someArray).Count(...)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top