首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步ThreadContext ID

异步ThreadContext ID
EN

Stack Overflow用户
提问于 2014-06-20 09:55:08
回答 1查看 376关注 0票数 0

更新现在已经不是问题了。没有意识到theadID返回的内部和外部的Dispatcher.Invoke方法是不同的。

据我理解,在使用异步时,等待任务T1将在一个不同的线程中执行,并且等待后面的代码被包装为带有ContinueWith of T1的任务T2。因此,我假设threadcontextID在下面的代码中是不同的。但是,下面的代码生成相同的ThreadContextID。我的理解错了吗?

另外,为什么我必须在T1中使用Dispatcher,但是可以直接更新T2中的主UI?threadContext开关是如何在异步/等待中工作的?谢谢。

更新: T1中的代码正在VS Debug视图的MainThread中执行。但是,如果它在主线程中,为什么我不能直接更新UI呢?它给了我CrossThread异常。

代码语言:javascript
复制
async private void AsyncTask(object sender, RoutedEventArgs e)
    {
        OutputDialog.Text = Thread.CurrentThread.ManagedThreadId+ Environment.NewLine + OutputDialog.Text;

        Task T1 = new Task(
                    () => {
                            Thread.Sleep(5000);
                            OutputDialog.Dispatcher.Invoke(() => { 
                                OutputDialog.Text = "Task in AWAIT" + Environment.NewLine + OutputDialog.Text;
                                OutputDialog.Text = Thread.CurrentThread.ManagedThreadId + Environment.NewLine + OutputDialog.Text;
                            });
                    });

        T1.Start();

        await T1;

        //T2
        OutputDialog.Dispatcher.Invoke(() => { OutputDialog.Text = "Continued Task after AWAIT 1" + Environment.NewLine + OutputDialog.Text; });

        OutputDialog.Text = "Continued Task after AWAIT 2" + Environment.NewLine + OutputDialog.Text;

        OutputDialog.Text = Thread.CurrentThread.ManagedThreadId + Environment.NewLine + OutputDialog.Text;
    }

UI的xaml代码

代码语言:javascript
复制
<Grid>
    <StackPanel>
        <Button Click="AsyncTask">Execute now</Button>
        <TextBox Name="OutputDialog" Background="Gray" Foreground="Yellow" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" VerticalContentAlignment="Stretch">
        </TextBox>
    </StackPanel>
</Grid>
EN

回答 1

Stack Overflow用户

发布于 2014-06-20 10:23:46

等待之后,流将被安排在调用线程上,这就是为什么您不需要T2中的调用。如果您想在t1的线程上继续,那么使用.ConfigureAwait(continueOnCapturedContext: false)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24324575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档