1-) C# RMOS - asenkron olarak veri indirmek Parallel ForEach Kullanımı
1-) Max 2 thread kullansın demek : var numberList = Enumerable.Range(2, 1000).ToList();
Parallel.ForEach(list_lines, new ParallelOptions { MaxDegreeOfParallelism = 2 }, line => { }); |
Parallel.ForEach(tumUrunLinkList, urunLink =>
{
yap(tumUrunLinkList, urunLink);
});
public void yap(List<string> tumUrunLinkList, string urunLink)
{
try
{
string htmlTumVeriler = requestGet(urunLink);
// to do write code
} }
public string requestGet(string url)
{
string result = "";
try
{
apiSifirla();
HttpResponseMessage responseOtel = client.GetAsync(url).Result;
result = responseOtel.Content.ReadAsStringAsync().Result;
result = System.Net.WebUtility.HtmlDecode(result);
}
catch (Exception ex)
{
alertMesaj("Önemsiz\n" + ex.Message);
}
return result;
}
LİST İLE KULLANCAKSAN LOCK KULLANMAK ZORUNDASIN
kaynak https://stackoverflow.com/questions/17416357/adding-to-a-list-in-a-parallel-foreach-loop-in-a-threadsafe-manner
var sync = new object(); int sayac = 0; Parallel.ForEach(urlList, item => { try { var model = getUruns(item); lock (sync) { sayac++; SplashScreenManager.Default.SetWaitFormDescription(sayac + "\n Petzztedarik Yükleniyor..."); modelList.Add(model); } } catch (Exception ex) { Console.WriteLine("**-> " + ex.Message); } }); Console.WriteLine( "bitti*****"); |
PARALLEL FORECHİN DOĞRU ÇALIŞTIGININ ISPATI
void calistir() { List<string> urlList = new List<string>(); for (int i = 0; i < 1000; i++) { urlList.Add(i.ToString()); } int sayac = 0; Parallel.ForEach(urlList, item => { try { Console.WriteLine(item); sayac++; } catch (Exception ex) { Console.WriteLine("**-> " + ex.Message); } }); Console.WriteLine("işlem bitti" + sayac); } |