aardio 文档
aardio 范例: .NET 异步任务
实例化泛型指南
//.NET 异步任务
import win.ui;
/*DSG{{*/
var winform = win.form(text="泛型 / 异步任务";right=759;bottom=469)
winform.add(
edit={cls="edit";left=9;top=9;right=743;bottom=445;edge=1;multiline=1;z=1}
)
/*}}*/
winform.show();
import dotNet;
//一定要在界面线程中创建异步任务,.NET 4.5 开始支持 Task.Run(Windows 10 自带 .NET 4.6)。
var Task = System.Threading.Tasks.Task;
//实例化泛型指南: https://www.aardio.com/zh-cn/doc/library-guide/std/dotNet/_.html#generic
var taskRun = Task.$Run(System.Int32);//缓存泛型实例,避免重复查询
var task = taskRun(
function() {
/*
模拟一些工作,
注意,无论 .NET 是在哪个线程执行,
aardio 回调总是在调用 .NET 的同一线程执行。
*/
thread.delay(1000);
return 42;
}
);
//task 是异步任务,任务完成以后回调以下函数
task.ContinueWith(
function(t) {
if(t.IsFaulted){
//winform.edit.log("出错了",tostring(t.Exception))
winform.edit.log(t.Exception.Message)
}
elseif(!t.IsCanceled){
var result = t.Result;
winform.edit.print("task.ContinueWith 完成了,返回值",result)
}
}
)
//也可以同步等待任务完成,不会阻塞界面
if( dotNet.wait(task,winform) ){
winform.edit.print( "dotNet.wait 完成了,返回值",task.Result)
}
else if(task.IsCanceled){
winform.edit.print( "dotNet.wait 取消了")
}
else if(task.IsFaulted){
winform.edit.print( "dotNet.wait 出错了",task.Exception.Message)
}
//C# 代码可以下面这样异步转同步,取消和失败会抛出异常
//var result = task.GetAwaiter().GetResult();
win.loopMessage();
Markdown 格式