Unten ist eine vereinfachte Version von wo ich Thread.CurrentPrincipal innerhalb einer asynchronen Methode auf ein benutzerdefiniertes UserPrincipal -Objekt festlegen möchte, aber das benutzerdefinierte Objekt verloren geht, nachdem die Wartezeit verlassen, obwohl es noch ist auf der neuen threadID 10.Festlegen von Thread.CurrentPrincipal mit async/await
Gibt es eine Möglichkeit, Thread.CurrentPrincipal innerhalb eines Wartens zu ändern und später zu verwenden, ohne es weiterzugeben oder zurückzugeben? Oder ist das nicht sicher und sollte niemals asynchron sein? Ich weiß, es gibt Thread-Änderungen, aber dachte async/erwarten würde synching dies für mich behandeln.
[TestMethod]
public async Task AsyncTest()
{
var principalType = Thread.CurrentPrincipal.GetType().Name;
// principalType = WindowsPrincipal
// Thread.CurrentThread.ManagedThreadId = 11
await Task.Run(() =>
{
// Tried putting await Task.Yield() here but didn't help
Thread.CurrentPrincipal = new UserPrincipal(Thread.CurrentPrincipal.Identity);
principalType = Thread.CurrentPrincipal.GetType().Name;
// principalType = UserPrincipal
// Thread.CurrentThread.ManagedThreadId = 10
});
principalType = Thread.CurrentPrincipal.GetType().Name;
// principalType = WindowsPrincipal (WHY??)
// Thread.CurrentThread.ManagedThreadId = 10
}
Arbeiten Sie mit ASP.NET, wenn so können Sie 'HttpContext.Current.User' wechseln möchten , das gibt dir das Verhalten, nach dem du suchst. –
Hehe, ich dachte, das würde kommen und hätte angeben müssen, dass dies für Nicht-Web-Anwendungen funktioniert, wo HttpContext nicht verfügbar ist. –
Ich habe nicht gedacht, wo Sie sind (Sie wollen sehr selten 'Task.Run' in einer Web-App). –