Асинхронный запуск не асинхронного метода

Нужно записать в файл, использую метод File.WriteAllText Правильно ли будет сделать это так для асинхронности?

await Task.Run(() => File.WriteAllText(path_json, json));

Ответы (1 шт):

Автор решения: aepot

С одной стороны да, с другой зависит от того, какая версия .NET используется.

Дело в том, что до релиза .NET 6 асинхронное файловое API было забаговано и было полу-синхронным, то есть блокировало на короткое время вызывающий поток даже при вызове асинхронных методов File.*****Async().

Файловое API переработано и эта проблема исправлена начиная с .NET 6.

Так что для .NET 6 и будущих версий дотнета делайте так:

await File.WriteAllTextAsync(path_json, json);

Для .NET 5 и старше вот так:

await Task.Run(() => File.WriteAllText(path_json, json));

К тому же в очень старых .NET Framework 4.x File.WriteAllTextAsync в принципе отсутствует, так что там альтернатив нет.

→ Ссылка