【发布时间】: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