我想在 Opal 文件中使用此代码安装我的组件:
Element['#wizard_param_grid_editor'].render do
ZGrid(rows: @work_spaces)
End
我得到了错误
Uncaught NoMethodError: undefined method render' for #]>
我想在 Opal 文件中使用此代码安装我的组件:
Element['#wizard_param_grid_editor'].render do
ZGrid(rows: @work_spaces)
End
我得到了错误
我想在 Opal 文件中使用此代码安装我的组件:
Element['#wizard_param_grid_editor'].render do
ZGrid(rows: @work_spaces)
End
我得到了错误
Uncaught NoMethodError: undefined method render' for #]>
不,您使用并发对,它使用默认线程池的任务,并且您使用Run
方法实例化任务,所以问题不在这里。但是您这里的代码有两个主要威胁:
var transBlock = new TransformBlock<string, T>
(async fName =>
{
// process file here
}, concurrentExecutionDataFlow);
你真的不应该transBlock
每次都创建。的主要思想TPL Dataflow
是您创建块一次并在之后使用它们。所以你应该重构你的应用程序以减少你正在实例化的块的数量,否则不TPL Dataflow
应该使用这种情况。
您的代码中的另一个威胁是您明确阻止了线程!
// Right here
await Task.WhenAll(allTsk);
TstRst.Text = "Completed..";
从同步事件处理程序的方法调用await
for 任务会async void
阻塞线程,因为默认情况下它会捕获同步上下文。首先,async void
应该避免。其次,如果你是异步的,你应该一直是异步的,所以事件处理程序也应该是异步的。第三,您可以为您的任务使用延续来更新您的 UI 或使用当前同步上下文。
所以,你的代码应该是这样的:
// store the sync context in the field of your form
SynchronizationContext syncContext = SynchronizationContext.Current;
// avoid the async void :)
public async Task AppIsolatedStore_TestInMultiThread_LstResultShouldBeEqual()
// make event handler async - this is the only exception for the async void use rule from above
private async void Button_Click(object sender, RoutedEventArgs e)
// asynchronically wait the result without capturing the context
await Task.WhenAll(allTsk).ContinueWith(
t => {
// you can move out this logic to main method
syncContext.Post(new SendOrPostCallback(o =>
{
TstRst.Text = "Completed..";
}));
}
);