Task.CompletedTask属性上的MethodAccessException

时间:2018-01-30 14:02:19

标签: c# wpf exception task-parallel-library methodaccessexception

我正在开发一个小型的wpf应用程序,其中一个用户遇到以下异常:

System.MethodAccessException: 
Attempt by method "xxx.HttpConfirmation.Invoke()" to access method "System.Threading.Tasks.Task.get_CompletedTask()" failed.
at xxx.HttpConfirmation.Invoke()
at xxx.RequestPipeline.<ProcessQueuedRequests>d__11.MoveNext()

根据MSDN文档,在以下情况下会抛出此类异常:

  • 使用反射从部分受信任的代码访问无法从正常编译代码访问的私有,受保护或内部方法。
  • 从透明代码访问安全关键方法。
  • 类库中方法的访问级别已更改,并且尚未重新编译引用该库的一个或多个程序集。

自引入以来,Task.get_CompletedTask()是公共的,我也没有使用反射来访问该属性。

我也不认为代码安全性/透明度存在问题,因为只有一个用户遇到此问题。

Task.CompletedTask 行引发异常:

public class HttpConfirmation
{
    public static Task Invoke()
    {
        using (var client = new WebClient())
        {
            try
            {
                // Send the request and don't wait for the response.
                client.UploadStringTaskAsync("http://sampleUrl.com", string.Empty);
            }
            catch
            {
                // ignore
            }
        }

        return Task.CompletedTask;
    }
}

关于可能导致异常的任何想法?

1 个答案:

答案 0 :(得分:1)

问题是客户安装了.NET 4.5.2,程序针对.NET 4.6。 虽然我仍然不清楚究竟为什么System.MethodAccessException被抛出,因为没有发生三次记录的抛出此异常的情况。