我的问题是我异步调用第三方方法,它有时可能会挂起,或者通常需要很长时间才能完成,但是无论出于何种原因,我们都需要杀死它。
似乎可以立即安全地杀死该方法的唯一方法是在一个进程中运行并杀死该进程。但是即使这样我也不确定是否可能。似乎只有.exe可以通过进程运行。
非常感谢您的帮助。
答案 0 :(得分:0)
.net核心中有AppDomain
的解决方案,对此article进行了说明。
长话短说:
要替换AppDomain
卸载事件,请使用:
System.Runtime.Loader.AssemblyLoadContext.Default.Unloading += context => InvokeBatchProcessors();
这是System.Runtime.Loader
库的一部分。
Appdomain
GetAssemblies
:
public static IEnumerable<Assembly> GetReferencingAssemblies(string assemblyName)
{
var assemblies = new List<Assembly>();
var dependencies = DependencyContext.Default.RuntimeLibraries;
foreach (var library in dependencies)
{
if (IsCandidateLibrary(library, assemblyName))
{
var assembly = Assembly.Load(new AssemblyName(library.Name));
assemblies.Add(assembly);
}
}
return assemblies;
}
private static bool IsCandidateLibrary(RuntimeLibrary library, assemblyName)
{
return library.Name == (assemblyName)
|| library.Dependencies.Any(d => d.Name.StartsWith(assemblyName));
}
这是Microsoft.Extensions.DependencyModel
软件包的一部分。
为AppDomain.CurrentDomain.GetAssemblies
创建 Pollyfill :
public class AppDomain
{
public static AppDomain CurrentDomain { get; private set; }
static AppDomain()
{
CurrentDomain = new AppDomain();
}
public Assembly[] GetAssemblies()
{
var assemblies = new List<Assembly>();
var dependencies = DependencyContext.Default.RuntimeLibraries;
foreach (var library in dependencies)
{
if (IsCandidateCompilationLibrary(library))
{
var assembly = Assembly.Load(new AssemblyName(library.Name));
assemblies.Add(assembly);
}
}
return assemblies.ToArray();
}
private static bool IsCandidateCompilationLibrary(RuntimeLibrary compilationLibrary)
{
return compilationLibrary.Name == ("Specify")
|| compilationLibrary.Dependencies.Any(d => d.Name.StartsWith("Specify"));
}
}
请注意,这些都是有关如何在.net核心中使用AppDomain
的示例,有关如何使用.net核心中的AppDomain
的功能。 < / p>