static void __OnCompletedRead(IAsyncResult asyncResult) { var asyncState = (AsyncState)asyncResult.AsyncState; try { int bytesRead = asyncState.fileStream.EndRead(asyncResult); if (bytesRead == asyncState.buffer.Length) { if (asyncState.callback != null) { // callback on main thread SchedulerUtils.MainThread_Invoke(() => { asyncState.callback(asyncState.buffer); }); } } else { Log.Error("[FileUtils] async end read bytes from file {0} error", asyncState.fileStream.Name); } } catch (IOException e) { Log.Error("[FileUtils] async end read bytes from file {0} error, {1}", asyncState.fileStream.Name, e.Message); } finally { asyncState.fileStream.Close(); } }