[英]Is it recommended/acceptable to run an async void method into a new thread?
[英]Does an async void method create a new thread everytime it is called?
我有以下场景:
async void DoStuff() {
// ...
}
button1.Click += (s, p) => {
DoStuff();
};
我不确定在第一次调用仍未完成时调用async void
方法会发生什么。 调用每次调用时都会创建一个新线程,还是调用会破坏并覆盖之前创建的线程? 另外,如果前一个假设是正确的,那么本地方法变量是否会被共享?
编辑:
我误解了async await
事情,因为在Windows 8应用程序中,它的行为有所不同。 如果您认为调用异步方法与创建像我这样的新线程相同,请阅读此澄清文章 。
我不确定当我同时多次调用异步void方法时会发生什么
你的意思是,如果在第一个呼叫仍然不完整(可能是“暂停”)时发生另一个呼叫? 它会工作得很好。 没有“压倒一切”,没有“毁灭”。 您将最终得到另一个状态机实例(这是编译器为您构建的实例)。
这两个状态机将具有完全独立的局部变量等。当然,其中只有一个实际上可以一次运行 ,除非异步方法中的某个地方避免捕获上下文。
不要忘记启动异步方法不会启动新线程。 您在异步方法中启动的某些异步操作可能会启动新线程,但这是另一回事。 生成的代码中没有任何内容创建新线程。
没有。
异步方法与线程无关。
相反,异步方法将在调用者的线程上执行其代码,就像常规方法调用一样,直到第一次await
。
每次await
之后的代码将在awaitable运行其回调的线程上运行。
这取决于你正在await
什么。
通常,您将await
Task
对象,默认情况下在UI线程上运行它们的回调。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.