Thread.CurrentPrincipal incorreto no método final assíncrono do WCF

Eu tenho um serviço WCF que tem seusThread.CurrentPrincipal definido noServiceConfiguration.ClaimsAuthorizationManager.

Quando eu implemento o serviço assincronamente como este:

    public IAsyncResult BeginMethod1(AsyncCallback callback, object state)
    {
        // Audit log call (uses Thread.CurrentPrincipal)

        var task = Task<int>.Factory.StartNew(this.WorkerFunction, state);

        return task.ContinueWith(res => callback(task));
    }

    public string EndMethod1(IAsyncResult ar)
    {
        // Audit log result (uses Thread.CurrentPrincipal)

        return ar.AsyncState as string;
    }

    private int WorkerFunction(object state)
    {
        // perform work
    }

Acho que o Thread.CurrentPrincipal está definido como o ClaimPrincipal correto no método Begin e também no WorkerFunction, mas no método End está definido como GenericPrincipal.

Eu sei que posso ativar a compatibilidade do ASP.NET para o serviço e usarHttpContext.Current.User que tem o princípio correto em todos os métodos, mas prefiro não fazer isso.

Existe uma maneira de forçar o Thread.CurrentPrincipal para o ClaimPrincipal correto sem ativar a compatibilidade do ASP.NET?

questionAnswers(3)

yourAnswerToTheQuestion