Ich bin gerade auf diesen Code gestoßen. Ich begann sofort zu krümmen und redete mit mir selbst (nicht nette Dinge). Die Sache ist, ich verstehe nicht wirklich warum und kann sie nicht vernünftig artikulieren. Es sieht einfach sehr schlecht für mich aus - vielleicht liege ich falsch.Verwenden von ThreadPool und Task.Wait innerhalb einer Async/Await-Methode
public async Task<IHttpActionResult> ProcessAsync()
{
var userName = Username.LogonName(User.Identity.Name);
var user = await _user.GetUserAsync(userName);
ThreadPool.QueueUserWorkItem((arg) =>
{
Task.Run(() => _billing.ProcessAsync(user)).Wait();
});
return Ok();
}
Dieser Code sieht für mich wie es unnötig Fäden mit ThreadPool.QueueUserWorkItem
und Task.Run
zu schaffen ist. Außerdem sieht es so aus, als könnte es zu Deadlocks oder ernsthaften Ressourcenproblemen unter schwerer Last kommen. Hab ich recht?
Die _billing.ProcessAsync() -Methode ist erwartbar (async), so würde ich erwarten, dass ein einfaches "erwarten" Schlüsselwort wäre das Richtige zu tun und nicht all das andere Gepäck.
Ja, es ist sehr schlecht. Auch dies sieht aus wie Code, der in einer Web-Seite läuft, likey taten sie 'ThreadPool.QueueUserWorkItem' und eigentlich vorhatte [' HostingEnvironment.QueueBackgroundWorkItem'] (https://msdn.microsoft.com/en-us/library/dn636893 (v = vs.110) .aspx) was Sie tun sollten, wenn Sie Hintergrundthreads auf IIS haben. –