从任务内部调用静态方法
Calling static method from inside a task
我在处理线程和委托给其他 classes 时遇到了一些问题。希望能更好地了解遗漏或错误的内容。
现在我需要能够从 运行 的任务中调用静态 class。对此没什么可做的,因为这实际上来自第 3 方库。我已经尝试了一些解决方案,但没有奏效。这是我尝试做的简化示例。
namespace ThreadTest
{
class Program
{
static void Main(string[] args)
{
Task<string> designation = new Task<string>(delegate
{
return Global.SyncMethod();
});
var resolvedDesignation = designation.ContinueWith((i) => { return i.Result; });
string result = resolvedDesignation.Result;
}
}
public static class Global
{
public static string SyncMethod()
{
return "Return test";
}
}
}
这个线程的原因是能够从需要一些时间来处理的东西中加载用户,而不会锁定 UI。但是,当尝试调用所引用的 class 时,它不起作用。对缺少的东西有什么帮助吗?它不会抛出任何异常,只会在应该执行的时候进入和跳过。
据我所知,给定的例子只会死锁。您实质上是在创建任务并阻塞直到它完成,但您永远不会启动它。所以你将永远阻止。
请参阅 documentation for task or use Task.Run 创建和启动任务。但请记住,即使您真的开始了任务,在它完成之前阻塞也很少是个好主意。它对您的 UI 没有帮助,因为 UI 线程仍将被阻塞,并且如果启动的任务需要在 UI 线程上执行某些操作,它仍可能导致死锁。
我在处理线程和委托给其他 classes 时遇到了一些问题。希望能更好地了解遗漏或错误的内容。 现在我需要能够从 运行 的任务中调用静态 class。对此没什么可做的,因为这实际上来自第 3 方库。我已经尝试了一些解决方案,但没有奏效。这是我尝试做的简化示例。
namespace ThreadTest
{
class Program
{
static void Main(string[] args)
{
Task<string> designation = new Task<string>(delegate
{
return Global.SyncMethod();
});
var resolvedDesignation = designation.ContinueWith((i) => { return i.Result; });
string result = resolvedDesignation.Result;
}
}
public static class Global
{
public static string SyncMethod()
{
return "Return test";
}
}
}
这个线程的原因是能够从需要一些时间来处理的东西中加载用户,而不会锁定 UI。但是,当尝试调用所引用的 class 时,它不起作用。对缺少的东西有什么帮助吗?它不会抛出任何异常,只会在应该执行的时候进入和跳过。
据我所知,给定的例子只会死锁。您实质上是在创建任务并阻塞直到它完成,但您永远不会启动它。所以你将永远阻止。
请参阅 documentation for task or use Task.Run 创建和启动任务。但请记住,即使您真的开始了任务,在它完成之前阻塞也很少是个好主意。它对您的 UI 没有帮助,因为 UI 线程仍将被阻塞,并且如果启动的任务需要在 UI 线程上执行某些操作,它仍可能导致死锁。