我正在与Julia合作,我的IDE是Juno,系统是Linux。
这是我的剧本:
#test.jl
function testShow(msg)
println(msg)
end
#@async begin # 1
testShow("aaa")
#end # 2
println("bbb")
如果我在Juno中运行它,我可以得到以下结果:
aaa
bbb
如果我删除评论#1和#2,意味着testShow("aaa")
位于async
块中并在Juno中运行,我可以在下面得到另一个结果:
bbb
aaa
现在,我需要使用命令行运行它。所以我打开一个终端并输入以下命令:
julia /home/myname/Julia/test.jl
如果#1和#2被评论,我可以按预期得到结果:
aaa
bbb
但是,如果我删除这两条评论,我会得到这样的结果:
bbb
为什么呢? @async
块中的代码不能用命令行执行?
答案 0 :(得分:3)
您需要等待@async
任务完成,您没有在命令行上看到输出,因为程序在任务完成之前退出。一种方法是捕获function testShow(msg)
println(msg)
end
t = @async begin
testShow("aaa")
end
println("bbb")
wait(t)
返回的任务,并在退出程序之前等待任务。
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding MapTileImage}" Stretch="Fill" Width="{Binding Width}" Height="{Binding Height}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<command:EventToCommand Command="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.ChangeTilesCommand}" CommandParameter="{Binding .}" />
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeftButtonDown">
<command:EventToCommand Command="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.DrawingCommand}" PassEventArgsToCommand="True"/>
<command:EventToCommand Command="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.ChangeTilesCommand}" CommandParameter="{Binding .}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeftButtonUp">
<command:EventToCommand Command="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.DrawingCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Image>
</DataTemplate>
</ItemsControl.ItemTemplate>