2015-07-07 2 views
0

Итак, я пытаюсь выполнить асинхронную запись некоторых данных на диск. Похоже, что .NET не имеет Awaitable асинхронной версии этого. Это то, что я придумал:Асинхронный (ожидаемый) WriteAllBytes в .NET

Public Async Function WriteAllBytesAsync(path As String, data() As Byte) As Task 
    Await Task.Run(
     Sub() 
      File.WriteAllBytes(path, data) 
     End Sub) 
End Function 

Будет ли это работать правильно?

+5

@AlexH Codereview предназначен для кода, который уже работает. http://codereview.stackexchange.com/help/on-topic – jacwah

+1

@AlexH Этот вопрос будет заблокирован, как только он появится в обзоре кода. Не предлагайте перенос, если вы не знакомы с конкретным SE. – Mast

+0

@Mast/jacwah Им очень жаль. –

ответ

1

Это будет работа - как в, работает правильно. Однако это не идеальное решение для каждого сценария. В частности, это будет плохое решение на ASP.NET, где следует избегать Task.Run; или для библиотеки общего назначения, где метод будет рекламировать асинхронную подпись, но реализовать ее, используя «фальшивую асинхронность» (блокирование потока пула потоков).

Итак, я бы сказал, что если этот код находится только в пользовательском интерфейсе или в консоли, все будет в порядке. В противном случае я бы изменил его, чтобы использовать истинную асинхронность (т. Е. Цикл, вызывающий WriteAsync).

Смежные вопросы