public void Read_Data_From_File()
        {
            uint treeId;
            Smb2FunctionalClient client = InitializeClient(TestConfig.SutIPAddress, out treeId);

            //fileName = "NewFile.pdf";
            fileName = "NewFile2.pptx";

            Smb2CreateContextResponse[] contexts;

            client.Create(
                treeId,
                fileName,
                CreateOptions_Values.FILE_SEQUENTIAL_ONLY | CreateOptions_Values.FILE_NON_DIRECTORY_FILE | CreateOptions_Values.FILE_OPEN_REPARSE_POINT,
                out fileId1,
                out contexts,
                RequestedOplockLevel_Values.OPLOCK_LEVEL_LEASE);

            byte[] data;
            uint   defaultBufferSize = DEFAULT_WRITE_BUFFER_SIZE_IN_KB;
            ulong  ulFileSize        = 8407754; //69903725;  //4615306;
            ulong  uiByteRemaining   = ulFileSize;
            ulong  ulFileOffset      = 0;

            //Task<ulong> t1 = null;
            //Task t2 = null;

            do
            {
                defaultBufferSize = (uiByteRemaining < 1048576) ? (uint)uiByteRemaining : 1048576;

                //client.Read(treeId, fileId1, ulFileOffset, defaultBufferSize, out data);

                Task <ulong> t1 = Task <ulong> .Factory.StartNew(() => client.ReadRequest(treeId, fileId1, ulFileOffset, defaultBufferSize));

                //ulong messageId = client.ReadRequest(treeId, fileId1, ulFileOffset, defaultBufferSize);

                t1.Wait();

                ulFileOffset    += defaultBufferSize;
                uiByteRemaining -= defaultBufferSize;

                //Task t2 = Task.Factory.StartNew(() => client.ReadResponse(t1.Result));
                client.ReadResponse(t1.Result);


                //Task<ulong> t2 = Task<ulong>.Factory.StartNew(() => client.ReadRequest(treeId, fileId1, ulFileOffset, defaultBufferSize));
                ////ulong messageId = client.ReadRequest(treeId, fileId1, ulFileOffset, defaultBufferSize);

                //t2.Wait();

                //ulFileOffset += defaultBufferSize;
                //uiByteRemaining -= defaultBufferSize;

                ////Task t2 = Task.Factory.StartNew(() => client.ReadResponse(t1.Result));
                //client.ReadResponse(t2.Result);


                //client.ReadResponse(messageId);
                //t2.Wait();
            }while (ulFileOffset < ulFileSize);

            client.Close(treeId, fileId1);

            client.LogOff();


            AccountCredential accountCredential = false ? TestConfig.NonAdminAccountCredential : TestConfig.AccountCredential;

            client.CreateNewSessionSetup(TestConfig.DefaultSecurityPackage, TestConfig.SutComputerName, accountCredential, false);

            string sharePath = Smb2Utility.GetUncPath(TestConfig.SutComputerName, TestConfig.BasicFileShare);

            client.TreeConnect(sharePath, out treeId);

            //fileName = "TestFile.wrf";
            ////fileName = "NewFile.pdf";

            client.Create(
                treeId,
                fileName,
                CreateOptions_Values.FILE_SEQUENTIAL_ONLY | CreateOptions_Values.FILE_NON_DIRECTORY_FILE | CreateOptions_Values.FILE_OPEN_REPARSE_POINT,
                out fileId1,
                out contexts,
                RequestedOplockLevel_Values.OPLOCK_LEVEL_LEASE);

            data = null;
            //defaultBufferSize = DEFAULT_WRITE_BUFFER_SIZE_IN_KB;
            //ulFileSize = 4615306; //69903725;
            uiByteRemaining = ulFileSize;
            ulFileOffset    = 0;

            do
            {
                defaultBufferSize = (uiByteRemaining < 1048576) ? (uint)uiByteRemaining : 1048576;

                //client.Read(treeId, fileId1, ulFileOffset, defaultBufferSize, out data);

                Task <ulong> t1 = Task <ulong> .Factory.StartNew(() => client.ReadRequest(treeId, fileId1, ulFileOffset, defaultBufferSize));

                //ulong messageId = client.ReadRequest(treeId, fileId1, ulFileOffset, defaultBufferSize);

                t1.Wait();

                ulFileOffset    += defaultBufferSize;
                uiByteRemaining -= defaultBufferSize;

                //Task t2 = Task.Factory.StartNew(() => client.ReadResponse(t1.Result));
                client.ReadResponse(t1.Result);


                //Task<ulong> t2 = Task<ulong>.Factory.StartNew(() => client.ReadRequest(treeId, fileId1, ulFileOffset, defaultBufferSize));
                ////ulong messageId = client.ReadRequest(treeId, fileId1, ulFileOffset, defaultBufferSize);

                //t2.Wait();

                //ulFileOffset += defaultBufferSize;
                //uiByteRemaining -= defaultBufferSize;

                ////Task t2 = Task.Factory.StartNew(() => client.ReadResponse(t1.Result));
                //client.ReadResponse(t2.Result);


                //client.ReadResponse(messageId);
                //t2.Wait();
            }while (ulFileOffset < ulFileSize);

            client.Close(treeId, fileId1);

            client.LogOff();

            client.Disconnect();
        }