Compilerfout CS1996
Kan niet wachten in de hoofdtekst van een vergrendelingsinstructie
Opmerking
In het volgende voorbeeld wordt CS1996 gegenereerd:
public class C
{
private readonly Dictionary<string, string> keyValuePairs = new();
public async Task<string> ReplaceValueAsync(string key, HttpClient httpClient)
{
lock (keyValuePairs)
{
var newValue = await httpClient.GetStringAsync(string.Empty);
if (keyValuePairs.ContainsKey(key)) keyValuePairs[key] = newValue;
else keyValuePairs.Add(key, newValue);
return newValue;
}
}
}
De voorgaande code produceert dezelfde fout met C# 13, zoals het await
in het lock
instructieblok staat.
Deze fout corrigeren
Asynchrone code binnen een lock
instructieblok is moeilijk om betrouwbaar en zelfs moeilijker te implementeren in algemene zin. De C#-compiler biedt geen ondersteuning om te voorkomen dat code gevoelig is voor impasses. Als u de asynchrone code uit het lock
instructieblok extraheert, wordt deze fout gecorrigeerd. Voorbeeld:
public class C
{
private readonly Dictionary<string, string> keyValuePairs = new();
public async Task<string> ReplaceValueAsync(string key, HttpClient httpClient)
{
var newValue = await httpClient.GetStringAsync(string.Empty);
lock (keyValuePairs)
{
if (keyValuePairs.ContainsKey(key)) keyValuePairs[key] = newValue;
else keyValuePairs.Add(key, newValue);
return newValue;
}
}
}
Met ons samenwerken op GitHub
De bron voor deze inhoud vindt u op GitHub, waar u ook problemen en pull-aanvragen kunt maken en controleren. Bekijk onze gids voor inzenders voor meer informatie.