La classe System.Threading.Task.Task è una classe che rappresenta un'operazione asincrona, o meglio, un wrapper di un delegate contenente tutte le informazioni necessarie per conoscere lo stato di avanzamento di un’operazione, ad esempio se è terminata perchè completata o interrotta dall’utente, mediante le proprietà IsCompleted e IsCanceled o per interrompere l'esecuzione dell'operazione, chiamando l’apposito metodo Cancel. Essendo la classe Task priva di costruttori pubblici, per crearne un'istanza è necessario utilizzare uno degli overload del metodo statico Create. Per attendere il termine di un'operazione asincrona, un'istanza della classe Task mette a disposizione il metodo Wait (o meglio tre overload): Wait() senza parametri...
Un piccolo problema risolvibile (volendo) utilizzando le Microsoft Parallel Extensions per il .Net Framework. Supponiamo di avere un testo HTML contenente un certo numero di collegamenti a file di cui si vuole effettuare il download. Per ottenere una lista dei link, possiamo ad esempio utilizzare la classe Regex ed un'opportuna Regular Expression: Regex reg = new Regex(regular_expression_pattern);
MatchCollection matches = reg.Matches(pageContent);
Ottenuta la collezione matches , possiamo seguire diverse strade per eseguire il download dei file, utilizzando istanze di System.Net.WebClient.
1) Eseguiamo un ciclo for e sequenzialmente eseguiamo il download dei file;
2) Scriviamo del codice per l'esecuzione su più...
Ho trovato molto interessante questo post sul blog di Charlie Calvert sull'uso di PLINQ (o meglio Microsoft Parallel Extensions) per la scrittura di codice che tragga vantaggio da sistemi con architetture multiprocessore. Magari può interessare anche ad altri... Technorati Tag: PLINQ