gpt4 book ai didi

c# - 使用反射进行异步编程

转载 作者:行者123 更新时间:2023-12-04 23:27:06 24 4
gpt4 key购买 nike

如何使用反射创建异步方法?

基本上我需要这样的东西:

async public Task asyncmethod()
{
await something();
}

但我需要通过反射(reflection)来做到这一点。

最佳答案

async的翻译方法在 C#(或 VB.NET)编译器级别工作,CIL 不支持它。编译器在最简单的情况下所做的是它会像这样翻译代码:

async public Task asyncmethod()
{
// some code
var x = await something();
// more code
}

变成基本上等同于以下内容的代码:
public Task asyncmethod()
{
// some code
return something().ContinueWith(
t =>
{
var x = t.Result;
// more code
});
}

真正的代码要复杂得多(它使用 SynchronizationContext ,如果 something() 返回已经完成,它实际上不是异步的 Task ,它支持 await 其他东西,谢谢 Task s),它甚至会是更复杂的 C# 代码更复杂。

但是如果你真的想创建 async使用 Reflection.Emit 的方法,这种转换实际上是您必须手动完成的。

但要注意的一件事是,如果您的方法使用 await在它之前只有一次 return s,你可以把它改写成(假设 something() 返回一个 Task 而不是 await 的其他东西):
public Task asyncmethod()
{
// some code
return something();
}

关于c# - 使用反射进行异步编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11046986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com