从任务内部调用静态方法

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 线程上执行某些操作,它仍可能导致死锁。