delegate, delagete kullanmak zorundasın. thread vs.. hikaye. delegate ile multitask yapılır. diğer şekilde sürekli zikzak hataları çıkar.

iki sene nce paralel programalama dersinde c# bilmememe rağmen TPL kütüphanesini iyi kavradıydım. Şimdi pararleliği en mükemmel sağlayabilmemiz için paralel çalıştırman gereken fonksiyonun içeriğini bilmemiz gerek. Ama sana syleyeceğim asıl tavsiye. While dngüsünün bulunduğu collectdata fonsiyonunu pararlel çalıştırmak için; While dngüsünün paralelleştirmeye çalış... Bu imzayı her grdüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı smürmektir

ConcurrentQueue followerIdsArray; public void StartCollect async Task StartCollectAsync { //... var tasks = new List ; for (int i = 0; i < 8; i++) await Task. WhenAll ; //... } async Task collect { Authorizer auther = new Authorizer ; Context context = await auther. getContext ; string pIdStr = ""; do { ConcurrentBag ftsBag = new ConcurrentBag ; List sList = new List ; ulong maxId = 0; ulong pFollowerId = 0; pIdStr = ""; if (fIdsArray. TryDequeue false) break; pFollowerId = Convert. ToUInt64 ; do { try { if (maxId!= 0) else if (sList. Count > 0) { if (sList. Last != null) { if (sList. Last . CreatedAt < endUntilDate) break; else } else } } catch } while (maxId!= 0); sList = sList. Where . ToList ; if (sList. Count > 0) { try catch } } while (! String. IsNullOrEmpty ; return Şuanda bu kodu test ediyordum ancak buda tek threadde çalışıyor. İşlemcim i5-3230, Device Manager'dan bakınca 4 processor listeleniyor. TeRRoR tarafından 02/May/15 17:36 tarihinde düzenlenmiştir herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri ğrenmeye çalışmayın. yabancı dil filan ğrenin amq.// s. kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//

collectData isminde içerisinde HTTP requesti atarak bilgi toplayan ve bu çektiği bilgileri veritabanına kaydeden bir methodum var. Bu methodun içerisinde 2 tane while dngüsü'de mevcut. Ancak recursive bir method değil, gelen http response'una gre yeni request atıyor filan falan. Yapmak istediğim collectData methodunu multi thread olarak çalıştırmak. Bazen while dngüleri çok uzun sürebiliyor. Byle olduğunda işlemin tamamlanması çok zaman alıyor. Multi thread olarak methodu çalıştırıp zamandan tasarruf sağlamak istiyorum. collectData methodunu aşağıdaki şekilde çalıştırıyorum Task tasks = new Task { Task. Factory. StartNew => ), Task. Factory. StartNew => ), Task. Factory. StartNew => ), Task. Factory. StartNew => ), Task. Factory. StartNew => ), Task. Factory. StartNew => ), Task. Factory. StartNew => ), Task. Factory. StartNew => ) }; Task. WaitAll ; Bu şekilde çağırmama rağmen methodlar senkron olarak çalışıyor. Bunları asenkron olarak nasıl çağırıp hepsinin tamamlanmasını bekleyebilirim acaba? İhtiyacımda Asenkron-Multithread karmaşasındada kalmadım değil, zaten yazıdanda terimin yerlerindeki hataları fark edersiniz. herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri ğrenmeye çalışmayın. yabancı dil filan ğrenin amq.// s. kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//

asenkron gidecek ise islerin Thread x1 = new Thread(new ThreadStart ; x1. Start ; Thread x2 = new Thread(new ThreadStart ; x2. Start ; Thread x3 = new Thread(new ThreadStart ; x3. Start ; seklinde yapsan yetmez mi? Bu aralar fazla yogunum. Unuttugum seyler oluyorsa affola. DM vs atın.

Peki hocamda birşey soracam gnderdiğin kodlarda hata yok mu? Task tasks = new Task tasks . Factory. StartNew => { tasks . Factory. StartNew => { şeklinde olmayacak mı? Paralel atama yapmamışsın ki hocam. Sıralı yaptırıyorsun zaten kodlara gre. Ayrıca 8 tane tasks oluşturma, 8 tane paralel task çalılşacağı anlamına gelmez. İşlemcin mantıksal kaçtane thread destekliyorsa en fazla o kadar prarlel çalışabilirsin. Daha fazlası gerçek manada paralel olmaz. Sadece sanal olarak paralel olur. Yani biri durur diğeri başlar şeklinde. Task kısmı ile bahsettiğin şey c# ile benim yaptığım şekildede yapabiliyorsun hocam. Derlemede sorun yok. Aynen dediğine katılıyorum Fiziksel ve Sanal çekirdek mevzularındada bilgim var. 8'i tamamen salladım. Onu daha sonra çalışacağı sunucuda kaç fiziksel çekirden varsa o şekilde çalıştıracak şekilde düzenleyecektim. Ancak bu şekil dede aynı anda birden en azından 2 tane çalışması gerekmez mi? herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri ğrenmeye çalışmayın. yabancı dil filan ğrenin amq.// s. kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//

hocam asenkron metodlar için task completion source u kullanabilirsin.. wait kullanmak bazı durumlarda tehlikeli olabiliyor daha nce yazdığım bir kod parçasına bakabilirsin rnek olarak Edit: Alttaki kodlar düzgün kopyalanmıyor, kod düzenleyicide sorun var. Buradan bakabilirsiniz koda http://paste2.org/pmO0h3ty public Task GetAvailableLibraries { var tcs = new TaskCompletionSource ; service. GetAvailableLibrariesCompleted += => { if tcs. TrySetResult(new List ; try catch }; try catch return tcs. Task; } bunu da şu şekilde çağırıyorum var result = await Task. Run => helper. GetAvailableLibraries ; burdaki result un türü List dir. Eğer fonksiyonda bir hata oluşmuşsa liste boş gelecektir. Tabi istersen null dnderebilirsin, sana kalmış.. Eğer sunucu işleriyle uğraşmıyorsan kesin sonuç dneceksen tcs. SetResult 'ı kullanabilirsin. Not: await keywordünü kullandığım için, içinde bulunduğu fonksiyon async olarak tanımlanmış olmalı yani Edit: Üstte task almamış kopyalarken, tekrar düzelttim o kısmı public async void AvailableLibraryList unbalanced tarafından 02/May/15 17:22 tarihinde düzenlenmiştir Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.

Peki hocamda birşey soracam gnderdiğin kodlarda hata yok mu? Task tasks = new Task tasks . Factory. StartNew => { tasks . Factory. StartNew => { şeklinde olmayacak mı? Paralel atama yapmamışsın ki hocam. Sıralı yaptırıyorsun zaten kodlara gre. Ayrıca 8 tane tasks oluşturma, 8 tane paralel task çalılşacağı anlamına gelmez. İşlemcin mantıksal kaçtane thread destekliyorsa en fazla o kadar prarlel çalışabilirsin. Daha fazlası gerçek manada paralel olmaz. Sadece sanal olarak paralel olur. Yani biri durur diğeri başlar şeklinde. DrKill tarafından 02/May/15 17:03 tarihinde düzenlenmiştir Bu imzayı her grdüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı smürmektir

iki sene nce paralel programalama dersinde c# bilmememe rağmen TPL kütüphanesini iyi kavradıydım. Şimdi pararleliği en mükemmel sağlayabilmemiz için paralel çalıştırman gereken fonksiyonun içeriğini bilmemiz gerek. Ama sana syleyeceğim asıl tavsiye. While dngüsünün bulunduğu collectdata fonsiyonunu pararlel çalıştırmak için; While dngüsünün paralelleştirmeye çalış... While'i paralleştirmem biraz zor güzüküyor çünkü while'da linear bir işlem var. A'nın sonucu B'ye, B'nin sonucu C'ye lazım. En son gelen değer null olduğunda while bitiyor. herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri ğrenmeye çalışmayın. yabancı dil filan ğrenin amq.// s. kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//

delegate, delagete kullanmak zorundasın. thread vs.. hikaye. delegate ile multitask yapılır. diğer şekilde sürekli zikzak hataları çıkar. delegate mi kaldı hocam? :) biraz geriden takip ediyorsun. net i :) Action /Funct a bak. Asenkron programlama diye bir şey var.. Ayrıca thread e neden hikaye dedin :) Kullanmasını bilmiyorsan zigzag da çizersin çember de :) unbalanced tarafından 10/May/15 19:35 tarihinde düzenlenmiştir Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.