officeArt object PV178 – Cviko10 •Synchronizační konstrukty •Parallel vs PLINQ •Asynchornní programování • Agenda •Speciální odpovědník „Téma projektu“ •Stručné zadání projektu •Musí být schváleno mnou před deadlinem • Upozornění •Mnohonásobně rychlejší jak Lock •Pouze pro práci s int a long •Processor umí udělat některé operace atomicky (jednou instrukcí - ThreadSafe) •Proměnná musí být předána přes ref •Metody: Add, Increment, Read, Exchange, CompareExchange • • • Interlocked int number = 0; Interlocked.Increment(ref number); •Zabraňuje optimalizacím před a po čtení proměnné • • MemmoryBarrier int result = 10; bool complete = false; // Zaručuje, že result bude zapsán dříve než complete Thread.MemoryBarrier(); complete = true; // Refresh hodnoty pro další vlákna Thread.MemoryBarrier(); •Zabraňuje optimalizacím •Synchronizace s nejnovější hodnotou •Neposkytuje sync mezi Read a Write •NEPOUŽÍVAT !!! • • Volatile private volatile int x; •Signalizace •Dává možnost notifikovat, že je něco: hotovo | připraveno | apod. AutoResetEvent a ManualResetEvent AutoResetEvent autoResetEvent = new AutoResetEvent(false); int result = 0; Task.Run(() => { Thread.Sleep(1000); result = 10; autoResetEvent.Set(); }); // Čekání na signál autoResetEvent.WaitOne(); Console.WriteLine($"Result: {computedResult}"); •Signaling Samostatná práce Image result for individual work •Parallel - Třída, metody Stop(), Break() - NEUMÍ zachovávat jednoduše pořadí •PLINQ - sada rozšiřujících metod - lze jednoduše zachovat pořadí prvků Parallel vs PLINQ Image result for demo Parralel •ParallelProgramming Samostatná práce Image result for individual work Image result for demo Porovnání výkonu LINQ a PLINQ •Zlepšuje odezvu aplikace •Zajištuje responzivitu grafického rozhraní aplikace (GUI) - „Uživatel nechce synchronně čekat, on chce asynchronně klikat“ •Vhodné využít například u: - přístupu k webu (volání API, …) - práce se soubory - zpracování velkých dat (obrazu, videa …) Asynchronní programování •Demo AsyncWFDemo_02 Asynchronní programování - demo Demo or die! – Mentorphile •Klíčové slovo •Umožňuje asynchronní spuštění metody •Metoda označená async musí vracet Task alebo Task •Async metody nemohou používat out a ref •Metoda by se měla jmenovat: MyMethodAsync(...) •Uvnitř metod by měl být await • Async Home - Documentation public static async Task TestMethodAsync() { ... } •Klíčové slovo •Umožňuje asynchronní čekání na metody •Označují místo čekání •Čekat pomocí await lze jen na async metodu •Měl by se vykytovat alespoň jednou v asynchronní metodě •Nemůže být v klasické metodě Await Await Chalk Emblem Stock Vector (Royalty Free) 1160818558 public static async Task TestMethodAsync() { await Task.Run(() => { }); } Asynchronní programování – flow public static async Task Main() { Console.WriteLine("Start"); Task t = Task.Run(_ => { Thread.Sleep(5000); Console.WriteLine("Task finish"); }); Console.WriteLine("Independent work"); await t; Console.WriteLine("Finish"); } Windows Console - Wikipedia Timer icon Royalty Free Vector Image - VectorStock Task finished Finish Asynchronní programování a uživatel public static { Console.WriteLine("Start"); Task t = Task.Run(_ => { Thread.Sleep(15000); Console.WriteLine("Task finish"); }); Console.WriteLine("Independent work"); Console.WriteLine("Finish"); } User (computing) - Simple English Wikipedia, the free encyclopedia Download Free png Computer Logo, Button Frames, Apps App, Symbol ... await t; t.Wait(); async Task Main() void Main() • • • •Znemožňuje čekání na metodu •Speciální použití (obsluha událostí ve WinForms) •Kromě speciálních případů nepoužívat! Asynchronní metody s void public async void MyMethodAsync() { await Task.Delay(5); } // await MyMethodAsync() nejde Best in Law: New Prop. 65 warning rules hit shopkeepers in August ... •AsynchronousPrograming Samostatná práce Image result for individual work ValueTask •Použití jako Task •Zlepšuje výkon •Od C# 7.0 •Vyšší flexibilita •Demo: ValueTaskExample.cs • •Exercises_XX.cs Asynchronní programování – procvičení na doma Image result for individual work ASP.NET - bez async/await Server icon computer server symbol in flat style Vector Image Vector db, Picture #929310 vector db Internet Symbol Icons - Download Free Vector Icons | Noun Project Timer icon Royalty Free Vector Image - VectorStock ASP.NET - bez async/await (řešení?) Server icon computer server symbol in flat style Vector Image Vector db, Picture #929310 vector db Internet Symbol Icons - Download Free Vector Icons | Noun Project ASP.NET - s async/await Server icon computer server symbol in flat style Vector Image Vector db, Picture #929310 vector db Internet Symbol Icons - Download Free Vector Icons | Noun Project notification icon | IconBros Timer icon Royalty Free Vector Image - VectorStock