C# 返回当前正在运行的异步事件列表

C# 返回当前正在运行的异步事件列表,c#,asynchronous,C#,Asynchronous,是否有system.threading函数允许我返回异步函数是否仍在运行 如果异步函数仍在运行,我想阻止用户退出应用程序(或者至少在退出前提示他们) 我正在创建异步函数作为任务,并在代码中等待它们,以防止UI被锁定 如果我能做一个简单的bool,我就会拥有我想要的功能 感谢这实际上取决于您使用的API,但对于任务,您可以将其存储在同步的可观察集合中,并在完成后将其删除,然后随时向用户显示集合。您甚至可以将它们包装在一个元组中,以存储它们的显示名称,并允许用户在需要时取消它们。任何方式?当然自己跟

是否有system.threading函数允许我返回异步函数是否仍在运行

如果异步函数仍在运行,我想阻止用户退出应用程序(或者至少在退出前提示他们)

我正在创建异步函数作为任务,并在代码中等待它们,以防止UI被锁定

如果我能做一个简单的bool,我就会拥有我想要的功能


感谢

这实际上取决于您使用的API,但对于任务,您可以将其存储在同步的可观察集合中,并在完成后将其删除,然后随时向用户显示集合。您甚至可以将它们包装在一个元组中,以存储它们的显示名称,并允许用户在需要时取消它们。

任何方式?当然自己跟踪他们。那肯定行。你的问题太宽泛了。做一些研究,尝试一些事情,如果你遇到一个特定的问题,然后考虑问一个问题。请务必阅读,以及问题中发布的其他指南:我正在寻找线程库实现,但没有跟踪自己。感谢您提出的问题建议。“我正在寻找线程库实现”——这一目标存在很多问题,尤其是异步操作与线程不同。NET中有许多不同实现的异步API,每一个都不同,使用不同的底层机制。随着.NET的发展,异步API也变得越来越抽象;例如,
任务
对象可以映射到任意数量的异步抽象。在我看来,您的请求是不可行的,但即使有可能,您也需要约束这个问题。我的理解是,与队列从列表演变而来一样,异步方法在线程库中根深蒂固。这就是我的困惑所在——如果一个异步方法位于调用堆栈中,我会假设有系统库返回是否仍在等待回调堆栈。“异步方法在线程库中根深蒂固”——您的理解是错误的_“如果异步方法位于调用堆栈中”-甚至不是所有异步操作都作为单个方法实现。对于这些方法,这些方法不“位于调用堆栈中”。事实上,现代的
异步
/
等待
功能的全部要点是,这些方法不会保持活动状态;当异步操作正在进行时,等待的方法将返回给调用方。还有其他机制允许该方法稍后继续执行。谢谢,我只是创建异步方法,当我使用队列存储正在访问的一些数据时,我希望找到一个布尔IsAsyncRunning类型的方法?我会在Threading类中查找这种类型的功能吗?另外,对于异步函数,我正在为它们使用Task.Task.TaskStatus。尽管最终的解决方案涉及到一个延续,该延续更新包含任务名称、任务本身及其完成时的状态的包装器对象,该包装器将实现INotifyPropertyChanged,以便在任务更改时通知UI。延续还需要从运行任务的同步列表中删除该任务。Hoodaticus,我只是想澄清一下,因为我仍在试图理解异步方法如何与线程无关(我觉得它至少需要在幕后)。。。这是否同样适用于我的公共异步任务somethingRunning()方法?我将尝试一下,但任何澄清都会很好。是的,它适用于所有任务。将它们添加到ConcurrentBag,并在运行它们之前向它们添加ContinuesWith,以将它们从包中删除。然后,您可以在显示屏幕时偶尔轮询包以更新它,或者您可以滚动一些自定义的并发可观察集合以更好地处理它。