如何检查某个任务是否正在运行?

问题描述

我尝试了以下操作:

struct Contact: Codable,Identifiable,customstringconvertible {
    var description: String { "name: \(name)" }
    
    let id = UUID()
    let name: String
    let contactId: Int
    let email: String

    let ownDescription: String?

    enum CodingKeys: String,CodingKey {
        case id,name,contactId,email
        case ownDescription = "description"//structPropertyName = "jsonPropertyName"
    }
}

,但是它永远不会满足if条件。有人可以帮忙吗?

解决方法

根据document,由于create_task调用get_running_loop,您不必获得事件循环-假设您已经在运行事件循环,因此get_running_loop()不会引发您的代码执行的以下错误:

RuntimeError: no running event loop


相反,请尝试使用新的asyncawait关键字,在Python 3.10上将弃用循环参数,因此,如果您正在学习异步方法,则最好这样做。

以下示例将正确满足if块中的条件。

import asyncio

async def my_coro():
    await asyncio.sleep(5)

async def main():
    task = asyncio.create_task(my_coro())

    if task in asyncio.all_tasks():
        print('Task found!')
    else:
        print('Missed!')

if __name__ == '__main__':
    asyncio.run(main())