非同步任务
非同步任务
与该教程相关的其他功能已在 Wolfram 语言的后续版本中引入. 有关最新信息,请参见 背景和预定任务.
非同步任务在后台运行,在有事件时异步运行函数. 仅当某些任务完成或者任务的设计使其可以无限期运行时,才可能运行非同步任务. 本教程介绍如何与非同步任务互动.
| AsynchronousTasks[] | 运行非同步任务的列表 |
| AsynchronousTaskObject["name",id,sessionid] | 表示一个非同步任务的对象 |
| StopAsynchronousTask[asyncTask] | 停止来自 asyncTask 的非同步计算 |
| StartAsynchronousTask[asyncTask] | 继续来自 asyncTask 的非同步计算 |
| WaitAsynchronousTask[asyncTask] | 等待 asyncTask 完成 |
| RemoveAsynchronousTask[asyncTask] | 关闭 asyncTask 并且将其从系统中删除 |
AsynchronousTasks[]eventHandler[_, "data", {response_}] :=
(result = response;
MessageDialog["Download complete."])
URLFetchAsynchronous["http://wolfram.com/favicon.ico", eventHandler]
AsynchronousTasks[]Short[result]
ImportString[FromCharacterCode[result], "ICO"]progress = 0;
downloadComplete = False;
Row[{"Progress: ", ProgressIndicator[Dynamic[progress]]}]
handleEvent[_, "progress", {bytesReceived_, bytesTotal_, ___}] :=
(progress = bytesReceived / bytesTotal;)
handleEvent[_, "data", data_] :=
(responseData = data;
MessageDialog["Download complete."])
downloadTask = URLFetchAsynchronous["http://exampledata.wolfram.com/20mb.dat",
handleEvent, Progress -> True]StopAsynchronousTask[downloadTask]StartAsynchronousTask[downloadTask]done = False;
Print["Starting download at ", DateString[]];
task = URLFetchAsynchronous["http://exampledata.wolfram.com/20mb.dat",
If[#2 === "data", done = True;MessageDialog["Download complete."]]&];
WaitAsynchronousTask[task, "Timeout" -> 1.5]
If[!done, Print["Still downloading at ", DateString[]]]task1 = URLFetchAsynchronous["http://exampledata.wolfram.com/20mb.dat",
If[#2 === "data", MessageDialog["Download #1 complete."]]&]
task2 = URLFetchAsynchronous["http://exampledata.wolfram.com/20mb.dat",
If[#2 === "data", MessageDialog["Download #2 complete."]]&]RemoveAsynchronousTask[task1]AsynchronousTasks[]