Diskuze: Probuzení spícího vlákna C#
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 9 zpráv z 9.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zapomeň na vlákna 
C# má mnohem lepší nástroje- třeba Timer resp. DispatcherTimer ve wpf
Když vidím :
Thread.Sleep(60000);
Jdou na mně mdloby 
No a z toho timeru můžeš pak spustit Backgroundworker, nebo Task - ty pak
můžeš taky volat odkud chceš
Souhlasím s tím co napsal ostrozan, ale pokud by jsi chtěl trvat na svém řešení, tak by se to dalo udělat například takto:
private Thread t;
private void ZahajeniKontroly()
{
t = new Thread(new ThreadStart(ZkontrolujData));
t.Start();
}
private void ProvedKontrolu()
{
if(!probiha_provadeni_kontroly)ProvadeniKontroly();
}
private bool probiha_provadeni_kontroly = false;
private void ZkontrolujData()
{
while (true)
{
if(!probiha_provadeni_kontroly)ProvadeniKontroly();
Thread.Sleep(60000);
}
}
private void ProvadeniKontroly()
{
probiha_provadeni_kontroly = true;
// Inicializace dat pro kontrolu ( pokud to bude nutné zde )
// Provádění kontroly
probiha_provadeni_kontroly = false;
}
V tomto případě pokud bych zavolal metodu ProvedKontrolu by se metoda ProvadeniKontroly nevolala ve vedlejším vlákně. Vyrábět kvůli tomu nové vlákno bych nechtěl, zkusím to tím druhým způsobem, ale děkuji.
Pokud bych ale každou minutu vytvářel nový Backgroundworker, tak nebude to moc časově/procesorově náročné? Je možné, že by se třeba ta kontrola prováděla i každých 10sekund.
Aha, ono stačí vytvořit jen jeden BackgroundWorker a jen ho zapínat, já
jsem si myslel, že když se provede událost .RunWorkerCompleted, že dojde k
úplnému uvolnění zdrojů a nejde dál používat. 
Hodně záleží, co ta tvoje kontrola vlastně dělá - jak je časově náročná
Pokud bych ale každou minutu vytvářel nový Backgroundworker, tak nebude to moc časově/procesorově náročné?
naopak já si myslím, že je zbytečné ho držet v paměti celou dobu, když ho potřebuješ jednou za minutu - odhaduju na pár milisekund
To není úplně jednoznačné jak často se ta kontrola bude provádět. Je
to někde mezi 5s až 1min. Ta kontrola spočívá pouze v serealizaci dat a
jejich odeslani. Časově to vychází kolem 10ms. Myslíš, že kdybych ho
potřeboval využívat třeba i těch každých 5s, že bude lepší si ho
vytvořit vždy nový a v události .RunWorkerCompleted si ho Disposovat? 
10 ms bych vůbec neřešil asynchronní operací
pokud to potřebuješ dělat periodicky , tak použij ten timer a spouštěj to
na událost Tick - a pak vždy kdy budeš potřebovat.
pokud to ale chceš mermomocí spouštět asynchronně - použij spíš ten Task - způsobů jak ho použít je víc - tady je takové shrnutí
BackgroundWorker je asi v tvém případě zbytečný - je to takový relikt starých časů - a možná, kdyby bývali přišli s Taskem dříve, tak by asi ani nevznikl
a k tvé poslední otázce - všeobecně pro jakýkoliv objekt - i 5 sekund je v počítačovém čase strašně dlouhá doba a je zbytečné ho tam držet, kvůli použití na 10 ms
Zobrazeno 9 zpráv z 9.
