Biblioteka równoległa zadań jest częścią .NET Framework od .NET 4. Jest to zestaw interfejsów API umożliwiających programistom programowanie aplikacji asynchronicznych.
Natknąłem się na kilka najlepszych praktyk dotyczących programowania asynchronicznego przy użyciu słów kluczowych async/ awaitsłów kluczowych języka C # (jestem nowy w C # 5.0). Jedna z udzielonych rad była następująca: Stabilność: poznaj konteksty synchronizacji ... Niektóre konteksty synchronizacji są niewłączane i jednowątkowe. Oznacza to, że w danym czasie można …
Mam kod asynchroniczny, do którego chciałbym dodać CancellationToken. Jest jednak wiele implementacji, w których nie jest to potrzebne, więc chciałbym mieć parametr domyślny - być może CancellationToken.None. Jednak, Task<x> DoStuff(...., CancellationToken ct = null) plony Wartość typu „” nie może być używana jako parametr domyślny, ponieważ nie ma standardowych konwersji …
Tak więc moja aplikacja musi wykonywać akcję prawie w sposób ciągły (z przerwą około 10 sekund między każdym uruchomieniem) tak długo, jak działa lub żądane jest anulowanie. Praca, którą musi wykonać, może zająć do 30 sekund. Czy lepiej jest użyć System.Timers.Timer i użyć funkcji AutoReset, aby upewnić się, że nie …
Jestem nowy w zadaniach .Net 4.0 i nie byłem w stanie znaleźć tego, co według mnie byłoby zastąpieniem opartym na zadaniach lub wdrożeniem timera, np. Okresowym zadaniem. Czy jest coś takiego? Aktualizacja Wymyśliłem to, co uważam za rozwiązanie dla moich potrzeb, które polega na umieszczeniu funkcji „Timer” wewnątrz zadania z …
Oto kod, który mam, ale nie rozumiem, co SemaphoreSlimrobi. async Task WorkerMainAsync() { SemaphoreSlim ss = new SemaphoreSlim(10); List<Task> trackedTasks = new List<Task>(); while (DoMore()) { await ss.WaitAsync(); trackedTasks.Add(Task.Run(() => { DoPollingThenWorkAsync(); ss.Release(); })); } await Task.WhenAll(trackedTasks); } void DoPollingThenWorkAsync() { var msg = Poll(); if (msg != null) { …
Niedawno powiedziano mi, że sposób, w jaki korzystam z mojego .ContinueWith for Tasks, nie jest właściwym sposobem ich używania. Nie znalazłem jeszcze dowodów na to w Internecie, więc zapytam was i zobaczę odpowiedź. Oto przykład, jak używam .ContinueWith: public Task DoSomething() { return Task.Factory.StartNew(() => { Console.WriteLine("Step 1"); }) .ContinueWith((prevTask) …
Pracuję nad wielozadaniowym projektem sieciowym i jestem nowy Threading.Tasks. Zaimplementowałem prosty Task.Factory.StartNew()i zastanawiam się, jak mogę to zrobić Task.Run()? Oto podstawowy kod: Task.Factory.StartNew(new Action<object>( (x) => { // Do something with 'x' }), rawData); Spojrzałem System.Threading.Tasks.Taskw Object Browser i nie mogłem znaleźć Action<T>takiego parametru. Jest tylko Actiontaki, który przyjmuje voidparametr, …
Chciałbym awaitna wyniku BlockingCollection<T>.Take()asynchronicznie więc nie blokować wątku. Szukasz czegoś takiego: var item = await blockingCollection.TakeAsync(); Wiem, że mógłbym to zrobić: var item = await Task.Run(() => blockingCollection.Take()); ale to trochę zabija cały pomysł, ponieważ ThreadPoolzamiast tego blokowany jest inny wątek (of ). Czy jest jakaś alternatywa?
Mam kod biblioteki (sieci gniazd), który zapewnia Taskoparty na interfejsie API dla oczekujących odpowiedzi na żądania, w oparciu o TaskCompletionSource<T>. Jednak w TPL występuje irytacja polegająca na tym, że wydaje się niemożliwe zapobiec synchronicznym kontynuacjom. Co ja lubię być w stanie zrobić, to albo: powiedz, TaskCompletionSource<T>że nie powinno pozwalać dzwoniącym …
W przypadku System.Threading.Tasks.Task<TResult>muszę zarządzać wyjątkami, które mogą zostać wyrzucone. Szukam najlepszego sposobu, żeby to zrobić. Do tej pory utworzyłem klasę bazową, która zarządza wszystkimi nieprzechwyconymi wyjątkami wewnątrz wywołania.ContinueWith(...) Zastanawiam się, czy jest na to lepszy sposób. Lub nawet jeśli to dobry sposób na zrobienie tego. public class BaseClass { protected …
Czy biblioteka równoległa zadań ma coś, co można by uznać za zamiennik lub ulepszenie w stosunku do klasy BackgroundWorker? Mam aplikację WinForms z interfejsem użytkownika w stylu kreatora i wykonuje ona kilka długotrwałych zadań. Chcę mieć responsywny interfejs użytkownika ze standardowym paskiem postępu i możliwością anulowania operacji. Zrobiłem to już …
Właśnie zrobiłem ciekawą obserwację dotyczącą tej Task.WhenAllmetody, gdy działałem na .NET Core 3.0. Przekazałem proste Task.Delayzadanie jako pojedynczy argument Task.WhenAlli spodziewałem się, że zapakowane zadanie będzie zachowywać się identycznie jak zadanie pierwotne. Ale tak nie jest. Kontynuacje pierwotnego zadania są wykonywane asynchronicznie (co jest pożądane), a kontynuacje wielu Task.WhenAll(task)opakowań są …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.