【问题标题】:Can IronPython 2.7 call async .NET functions?IronPython 2.7 可以调用异步 .NET 函数吗?
【发布时间】:2018-06-26 17:35:45
【问题描述】:

在我的应用程序中嵌入了 IronPython 2.7,并将 clr.AddReference() 用于托管的 .NET dll。

该 DLL 具有异步功能,例如:

async public Task<string> Foo(string x) {
   string y=await bar(x); 
   return y;
}

从 IronPython 调用时,我可以看到返回的 Task 对象,但看不到调用的结果。是否有等待呼叫的语法? (很抱歉:我是 Python 新手……)

更新:在帖子的第一个版本中可能没有明确问题是什么(并修复了代码 sn-p 中的一个愚蠢的错字)。上面的函数工作得很好(顺便说一句,永远不要使用 .Result ,因为它会导致死锁)。

挑战在于找到 Python 的答案。在 IronPython 中,我将此函数称为:

f=mylib.Foo("hello")

并取回一个Task(不是字符串)作为返回值,这是正确的。但是,如果我尝试这样做:

g=f.Result

它死锁(如预期的那样)。 IronPython 是否以任何方式支持与 C# 的 await 相同的语义?

【问题讨论】:

  • 如果“bar()”的签名是“async Task”,你可以按照以下方式做一些事情:var temp = await bar(); temp.Wait(); x = temp.Result;

标签: c# python-2.7 asynchronous ironpython


【解决方案1】:

我对 IronPython 了解不多,但异步管理由您的 .net 安装处理,并且是该语言的一个特性。

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 2014-06-14
    • 2021-12-08
    • 1970-01-01
    • 2019-11-05
    • 2011-12-30
    相关资源
    最近更新 更多