[나크21] 캐주얼 미니스커트 치마바지 NK21-P-10
BLOG main image
분류 전체보기 (540)
▩▩ 개인공간 ▩▩ (124)
▩▩ 문화생활 ▩▩ (45)
▩▩ 게임 ▩▩ (211)
▩▩ 일러스트 ▩▩ (46)
▩▩ 프로그래밍 ▩▩ (73)
▩▩ 코스메틱 ▩▩ (1)
▩▩ 여행 ▩▩ (0)
* 셈틀 롤드컵 * (1)
반응형
Total
Today hit
Yesterday hit
▩▩ 프로그래밍 ▩▩/C#
반응형

.net framework 4.5에 새롭게 추가된 키워드 async 에 대해 알아 보겠습니다.

델리게이터와 워커쓰레딩을 이젠 함수정의시 async 키워드로 간편하게 제작할수가 있습니다.

static public async void WriteNationCommonMail(int aNationIdx, string aTitle, string aContents)

{

var task1 = System.Threading.Tasks.Task<int>.Run(() => ProcWriteNationCommonMail(aNationIdx, aTitle, aContents));

int sum = await task1;

}

static int ProcWriteLordCommonMail(long aOwnerIdx, string aTitle, string aContents)

{

// temp code MailType를 db에 저장하지 않는다면 삭제..

LordCommonMailItem tempInfo = new LordCommonMailItem();

tempInfo.MailType = (int)MailItemType.PrivateText;

tempInfo.ownerIdx = aOwnerIdx;

tempInfo.title = aTitle;

tempInfo.contents = aContents;

tempInfo.recvTime = DateTime.Now;

GameWorldService.Instance().ArchiveDBMS.AddLordCommonMail(tempInfo);

return 0;

}

위처럼 사용하시면 됩니다.

그러면 WriteNationCommonMail을 호출하면, ProcWriteLordCommonMail()함수 시리행과 int sum = await task1; 이 코드가 워커쓰레드로 자동 분리됩니다~. 즉 호출측 쓰레드는 대기하지 않고 곧바로 다른 처리를 한다는 의미입니다.

이점

코드가 비교적 간결해 집니다. 델리게이터 정의하고 이런거 없어지니깐요.

델리게이터를 써서 발생한 워커쓰레드보다 비교적 쓰레드풀링이 효과적입니다.

.net framework 4.5 Socket

NetworkStream에 ReadAsync(), SendAsync() 함수를 아래처럼 사용하면

ReadAsync() 예제

int readbytes = await client.GetStream().ReadAsync(buff, 0, Packet.BUFFER_SIZE);//pocressrecv()

if (readbytes == 0)

{

Console.WriteLine("0 Byte Received");

var key = PlayerInfoTable.FirstOrDefault(row =>row.Value.socket==client);

lbserver.Request_GameLogout_UserID(key.Key);

LoginUserDeleteInfo(key.Key);

client.Close();

return;

}

var packet = new Packet(buff, 4, readbytes - 4);

AddPacket(client, packet);

int readbytes 부터 호출한 쓰레드가 아닌 워커쓰레드로 분기되어 처리가 됩니다.

성능은 .net 3.5 socket과 동일합니다.




반응형