비동기 콜백 -- BeginInvoke 메서드
예: FileStream 클래스의 객체에 대한 BeginRead() 및 EndRead()
BeginRead() 메서드는 비동기식 작업의 상태를 나타내는 IAsyncResult 객체를 반환합니다.현재 스레드를 막고 읽기 완료를 기다리는 것을 좋아한다면, EndRead () 방법을 호출하고 IAsyncResult 대상을 매개 변수로 이 방법에 전달할 수 있습니다.
BeginRead () 방법은 실제로 비동기식 읽기를 위한 새로운 스레드를 시작하는 것입니다. EndRead () 방법은 비동기식 스레드를 호출한 Join 방법과 비슷합니다.
demo1: 비동기 스레드 10개를 만듭니다. 스레드마다 버퍼에 10개 바이트를 읽는 것을 책임지고 리셋 방법GetPosition은 스레드가 끝난 후에 호출됩니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
using System.IO;
namespace AsyncCallback { class Program { static void Main(string[] args) { using (FileStream fs = new FileStream(@"F:\123.txt", FileMode.Open, FileAccess.Read)) { byte[] bs = new byte[1000]; for (int i = 0; i < 10; i++) { fs.BeginRead(bs, i * 100, 100, GetPosition, fs); } StringBuilder sb = new StringBuilder(); for (int i = 0; i < 100; i++) { sb.Append((char)i); } Console.ReadKey(); }
}
static void GetPosition(IAsyncResult iar)
{
FileStream fs = (FileStream)iar.AsyncState;
Console.WriteLine(" :{0}",fs.Position);
fs.EndRead(iar);
}
}
}
demo2: delegate가 의뢰한 BeginInvoke,EndInvoke,AsyncCallback 사용법
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
using System.Threading;
namespace BeginInvoke { class Program { static void Main(string[] args) { NewTaskDelegate task = NewTask;//int n = task(2000);
//AsyncCallback
//AsyncCallback callback = new AsyncCallback(MyAsyncCallback);
//IAsyncResult asyncResult = task.BeginInvoke(2000, callback, task);
//AsyncCallback
IAsyncResult asyncResult = task.BeginInvoke(2000, MyAsyncCallback, task);
//int result = task.EndInvoke(asyncResult);
//Console.WriteLine(result);
Console.ReadKey();
}
public delegate int NewTaskDelegate(int ms);
private static int NewTask(int ms)
{
Console.WriteLine(" ");
Thread.Sleep(ms);
Random r = new Random();
int n = r.Next(10000);
Console.WriteLine(" ");
return n;
}
private static void MyAsyncCallback(IAsyncResult iar)
{
NewTaskDelegate task = (NewTaskDelegate)iar.AsyncState;
int n = task.EndInvoke(iar);
Console.WriteLine(n);
Console.WriteLine(" 。");
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.