internal void Start(LegacyPageAsyncTaskManager manager, Object source, EventArgs args)
        {
            Debug.Assert(!_started);

            _taskManager        = manager;
            _completionCallback = new AsyncCallback(this.OnAsyncTaskCompletion);
            _started            = true;

            Debug.Trace("Async", "Start task");

            try {
                IAsyncResult ar = _beginHandler(source, args, _completionCallback, _state);

                if (ar == null)
                {
                    throw new InvalidOperationException(SR.GetString(SR.Async_null_asyncresult));
                }

                if (_asyncResult == null)
                {
                    // _asyncResult could be not null if already completed
                    _asyncResult = ar;
                }
            }
            catch (Exception e) {
                Debug.Trace("Async", "Task failed to start");

                _error     = e;
                _completed = true;
                _completedSynchronously = true;
                _taskManager.TaskCompleted(true /*onCallerThread*/); // notify TaskManager
                // it is ok to say false (onCallerThread) above because this kind of
                // error completion will never be the last in ResumeTasks()
            }
        }
    internal void Start(LegacyPageAsyncTaskManager manager, Object source, EventArgs args) {
        Debug.Assert(!_started);

        _taskManager = manager;
        _completionCallback = new AsyncCallback(this.OnAsyncTaskCompletion);
        _started = true;

        Debug.Trace("Async", "Start task");

        try {
            IAsyncResult ar = _beginHandler(source, args, _completionCallback, _state);

            if (ar == null) {
                throw new InvalidOperationException(SR.GetString(SR.Async_null_asyncresult));
            }

            if (_asyncResult == null) {
                // _asyncResult could be not null if already completed
                _asyncResult = ar;
            }
        }
        catch (Exception e) {
            Debug.Trace("Async", "Task failed to start");

            _error = e;
            _completed = true;
            _completedSynchronously = true;
            _taskManager.TaskCompleted(true /*onCallerThread*/); // notify TaskManager
            // it is ok to say false (onCallerThread) above because this kind of
            // error completion will never be the last in ResumeTasks()
        }
    }