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.
Niektóre System.Threading.Tasks.Taskkonstruktory przyjmują CancellationTokenjako parametr: CancellationTokenSource source = new CancellationTokenSource(); Task t = new Task (/* method */, source.Token); Zaskakuje mnie to, że z wnętrza metody nie ma sposobu, aby faktycznie dostać się do przekazanego tokena (np. Nic podobnego Task.CurrentTask.CancellationToken). Token musi być dostarczony przez inny mechanizm, taki jak obiekt …
Być może czegoś mi brakuje, ale jaka jest różnica między robieniem: public void MyMethod() { Task t = Task.Factory.StartNew(DoSomethingThatTakesTime); t.Wait(); UpdateLabelToSayItsComplete(); } public async void MyMethod() { var result = Task.Factory.StartNew(DoSomethingThatTakesTime); await result; UpdateLabelToSayItsComplete(); } private void DoSomethingThatTakesTime() { Thread.Sleep(10000); }
AFAIK, wszystko, co wie, to to, że w pewnym momencie wywoływana jest jego metoda SetResultlub SetExceptionmetoda w celu uzupełnienia Task<T>ekspozycji poprzez swoją Taskwłaściwość. Innymi słowy, działa jako producent dla Task<TResult>i jego ukończenia. Widziałem tutaj przykład: Jeśli potrzebuję sposobu, aby wykonać Func asynchronicznie i mam zadanie reprezentujące tę operację. public static …
Byłem zachwycony, widząc nową System.Collections.Concurrentprzestrzeń nazw w .Net 4.0, całkiem fajnie! Widziałem ConcurrentDictionary, ConcurrentQueue, ConcurrentStack, ConcurrentBagi BlockingCollection. Jedną z rzeczy, której wydaje się być tajemniczo brakuje, jest ConcurrentList<T>. Czy sam muszę to napisać (lub pobrać z Internetu :))? Czy brakuje mi czegoś oczywistego?
Nie do końca rozumiem różnicę między Task.Waiti await. Mam coś podobnego do następujących funkcji w usłudze WebAPI ASP.NET: public class TestController : ApiController { public static async Task<string> Foo() { await Task.Delay(1).ConfigureAwait(false); return ""; } public async static Task<string> Bar() { return await Foo(); } public async static Task<string> Ros() …
Działa dobrze, gdy ma jedno lub dwa zadania, ale zgłasza błąd „Zadanie zostało anulowane”, gdy mamy na liście więcej niż jedno zadanie. List<Task> allTasks = new List<Task>(); allTasks.Add(....); allTasks.Add(....); Task.WaitAll(allTasks.ToArray(), configuration.CancellationToken); private static Task<T> HttpClientSendAsync<T>(string url, object data, HttpMethod method, string contentType, CancellationToken token) { HttpRequestMessage httpRequestMessage = new HttpRequestMessage(method, …
Mam metodę: private static void Method() { Console.WriteLine("Method() started"); for (var i = 0; i < 20; i++) { Console.WriteLine("Method() Counter = " + i); Thread.Sleep(500); } Console.WriteLine("Method() finished"); } I chcę rozpocząć tę metodę w nowym zadaniu. Mogę rozpocząć nowe zadanie w ten sposób var task = Task.Factory.StartNew(new Action(Method)); …
W języku C # i TPL ( biblioteka zadań równoległych ) Taskklasa reprezentuje trwającą pracę, która generuje wartość typu T. Chciałbym wiedzieć, jaka jest potrzeba metody Task.FromResult ? To znaczy: w scenariuszu, w którym masz już pod ręką wytworzoną wartość, jaka jest potrzeba zawinięcia jej z powrotem w Zadanie? Jedyne, …
W aplikacji metra muszę wykonać wiele połączeń WCF. Istnieje wiele połączeń, które należy wykonać, więc muszę je wykonywać w pętli równoległej. Problem polega na tym, że pętla równoległa kończy się przed zakończeniem wszystkich wywołań WCF. Jak zmieniłbyś to tak, aby działało zgodnie z oczekiwaniami? var ids = new List<string>() { …
Gram z tymi zadaniami Windows 8 WinRT i próbuję anulować zadanie przy użyciu poniższej metody i do pewnego momentu działa. Metoda CancelNotification DOES jest wywoływana, co powoduje, że myślisz, że zadanie zostało anulowane, ale w tle zadanie jest nadal uruchomione, a po jego zakończeniu stan zadania jest zawsze ukończony i …
Klasa CancellationTokenSourcejest jednorazowa. Szybkie spojrzenie w Reflector dowodzi użycia KernelEvent(bardzo prawdopodobne) niezarządzanego zasobu. Ponieważ CancellationTokenSourcenie ma finalizatora, jeśli go nie wyrzucimy, GC tego nie zrobi. Z drugiej strony, jeśli spojrzysz na przykłady wymienione w artykule MSDN Anulowanie w zarządzanych wątkach , tylko jeden fragment kodu usuwa token. Jaki jest właściwy …
W ciągu ostatnich kilku dni testowałem nowe funkcje .net 4.5 i c # 5. Podoba mi się jego nowe funkcje async / await. Wcześniej korzystałem z BackgroundWorker do obsługi dłuższych procesów w tle z responsywnym interfejsem użytkownika. Moje pytanie brzmi: kiedy mam te fajne nowe funkcje, kiedy powinienem używać async …
Chciałbym obsługiwać kolekcję równolegle, ale mam problemy z jej wdrożeniem i dlatego liczę na pomoc. Problem pojawia się, jeśli chcę wywołać metodę oznaczoną jako asynchroniczna w C #, w obrębie lambda pętli równoległej. Na przykład: var bag = new ConcurrentBag<object>(); Parallel.ForEach(myCollection, async item => { // some pre stuff var …
Właśnie zobaczyłem 3 procedury dotyczące korzystania z TPL, które wykonują tę samą pracę; oto kod: public static void Main() { Thread.CurrentThread.Name = "Main"; // Create a task and supply a user delegate by using a lambda expression. Task taskA = new Task( () => Console.WriteLine("Hello from taskA.")); // Start the …
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.