Diskuze: Nemůžu číst z nově vytvořeného a přepsaného souboru
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
problém je v tom, že ten await operátor neblokuje celé vlákno. On pouze
"naplánuje" pokračování za ním až na poté, co se dokončí Task v jeho
operandu a předá řízení zpátky metodě, která async metodu (zde
WriteStreamToFile) zavolala (zde GetSHA256FromStream).
Jednoduše řečeno, při čekání na CopyToAsync se už zároveň pokračuje
ve vykonávání Checksum.GetSHA256 a ta se snaží přistoupit k již
otevřenému souboru. To je celá podstata async/await, pokud by await
zablokoval celé vlákno, tak by používání asynchronní operace nedávalo
žádný smysl.
Tudíž ty musíš awaitovat i metodu WriteStreamToFile. Nebo nejjednodušší řešení je zde nepoužívat asynchronní CopyToAsync a vykonat vše synchronně pomocí CopyTo, ale to zaleží na dané aplikaci, zda-li je toto přijatelné.
Zobrazeno 3 zpráv z 3.