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.
Szukam uzasadnienia, dlaczego CancellationTokenstruktura .NET została wprowadzona jako dodatek do CancellationTokenSourceklasy. Rozumiem, jak należy używać interfejsu API, ale chcę również zrozumieć, dlaczego jest tak zaprojektowany. To znaczy, dlaczego mamy: var cts = new CancellationTokenSource(); SomeCancellableOperation(cts.Token); ... public void SomeCancellableOperation(CancellationToken token) { ... token.ThrowIfCancellationRequested(); ... } zamiast bezpośredniego przekazywania, CancellationTokenSourcejak: var …
Patrząc na różne przykłady C # Async CTP, widzę niektóre funkcje asynchroniczne, które zwracają void, i inne, które zwracają nieogólne Task. Rozumiem, dlaczego zwracanie a Task<MyType>jest przydatne do zwracania danych do dzwoniącego po zakończeniu operacji asynchronicznej, ale funkcje, które widziałem, które mają typ Taskzwracania, nigdy nie zwracają żadnych danych. Dlaczego …
W przypadku, gdy nie zależy mi na kolejności wykonywania zadań i po prostu potrzebuję ich wszystkich, czy nadal powinienem używać await Task.WhenAllzamiast wielu await? np. jest DoWork2poniżej preferowanej metody DoWork1(i dlaczego?): using System; using System.Threading.Tasks; namespace ConsoleApp { class Program { static async Task<string> DoTaskAsync(string name, int timeout) { var …
Implementuję metodę Task<Result> StartSomeTask()i tak się składa, że znam wynik jeszcze przed wywołaniem metody. Jak utworzyć zadanie <T>, które zostało już zakończone? Oto, co obecnie robię: private readonly Result theResult = new Result(); public override Task<Result> StartSomeTask() { var task = new Task<Result>(() => theResult); task.RunSynchronously(CurrentThreadTaskScheduler.CurrentThread); return task; } Czy …
Chcę uruchomić zadanie w wątku w tle. Nie chcę czekać na zakończenie zadań. W .net 3.5 zrobiłbym to: ThreadPool.QueueUserWorkItem(d => { DoSomething(); }); W .net 4 TPL jest sugerowanym sposobem. Typowy zalecany wzór, który widziałem, to: Task.Factory.StartNew(() => { DoSomething(); }); Jednak StartNew()metoda zwraca Taskobiekt, który implementuje IDisposable. Wydaje się, …
Używam TPL w moim bieżącym projekcie i używam Parallel.Foreach do przędzenia wielu wątków. Klasa Task zawiera Wait (), aby poczekać, aż zadanie zostanie ukończone. W ten sposób, jak mogę czekać, aż Parallel.ForEach zakończy się, a następnie przejść do wykonywania kolejnych instrukcji?
Gdy użytkownik ładuje stronę, wysyła jedno lub więcej żądań ajax, które trafiają do kontrolerów ASP.NET Web API 2. Jeśli użytkownik przejdzie na inną stronę, przed zakończeniem tych żądań ajax, żądania są anulowane przez przeglądarkę. Nasz ELMAH HttpModule następnie rejestruje dwa błędy dla każdego anulowanego żądania: Błąd 1: System.Threading.Tasks.TaskCanceledException: A task …
Czy ktoś może wyjaśnić, czy awaiti ContinueWithsą synonimami, czy nie w poniższym przykładzie. Próbuję po raz pierwszy skorzystać z TPL i przeczytałem całą dokumentację, ale nie rozumiem różnicy. Oczekuj : String webText = await getWebPage(uri); await parseData(webText); Kontynuuj z : Task<String> webText = new Task<String>(() => getWebPage(uri)); Task continue = …
Od jakiegoś czasu próbowałem uzyskać coś, co moim zdaniem byłoby proste przy pracy z .NET 4.5 Chcę odpalić dwa długotrwałe zadania w tym samym czasie i zebrać wyniki w najlepszy sposób C # 4.5 (RTM) Poniższe działa, ale mi się to nie podoba, ponieważ: Chcę Sleepbyć metodą asynchroniczną, aby mogła …
// let's say there is a list of 1000+ URLs string[] urls = { "http://google.com", "http://yahoo.com", ... }; // now let's send HTTP requests to each of these URLs in parallel urls.AsParallel().ForAll(async (url) => { var client = new HttpClient(); var html = await client.GetStringAsync(url); }); Oto problem, uruchamia ponad …
Naprawdę podoba mi się to pytanie: Najprostszy sposób na wykonanie metody „odpal i zapomnij” w języku C #? Chcę tylko wiedzieć, że teraz, gdy mamy rozszerzenia równoległe w C # 4.0, czy istnieje lepszy, czystszy sposób na wykonanie polecenia Fire & Forget z Parallel linq?
Mam wielowarstwową aplikację .Net 4,5 wywołującą metodę przy użyciu nowych asynci C #await słów kluczowych, które po prostu się zawieszają i nie rozumiem, dlaczego. Na dole mam metodę asynchroniczną, która rozszerza nasze narzędzie bazy danych OurDBConn(w zasadzie opakowanie dla bazowego DBConnectioni DBCommandobiektów): public static async Task<T> ExecuteAsync<T>(this OurDBConn dataSource, Func<OurDBConn, …
Co to oznacza i jak go rozwiązać? Używam zadań TPL. Cały błąd Wyjątki zadania nie zostały zaobserwowane ani przez oczekiwanie na zadanie, ani przez dostęp do jego właściwości Exception. W rezultacie niezauważony wyjątek został ponownie zgłoszony przez wątek finalizatora. w System.Threading.Tasks.TaskExceptionHolder.Finalize () mscorlib
Używam zadań do uruchamiania długotrwałych wywołań serwera w moim ViewModel, a wyniki są kierowane z powrotem przy Dispatcherużyciu TaskScheduler.FromSyncronizationContext(). Na przykład: var context = TaskScheduler.FromCurrentSynchronizationContext(); this.Message = "Loading..."; Task task = Task.Factory.StartNew(() => { ... }) .ContinueWith(x => this.Message = "Completed" , context); Działa to dobrze, gdy uruchamiam aplikację. Ale …
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.