Microsoft MVP성태의 닷넷 이야기
선생님 안녕하세요 async await 교착 관련 질문입니다 [링크 복사], [링크+제목 복사],
조회: 11252
글쓴 사람
ckm (dktkwkak03 at gmail.com)
홈페이지
첨부 파일
 

아래 교착이 발생하는 코드입니다
코드 맥락상 교착이 발생할만한 부분이 없는 것 같은데 왜 교착이 발생하는 걸까요?
MainLoginForm.activeNumber 정적 필드를 제거하니 코드가 정상적으로 호출되긴 하는데
MainLoginForm.activeNumber 때문은 아닌 것 같아서요
안내해 주시면 정말 감사하겠습니다

MainForm.cs
private bool isRunningHeartbeat;

private void MainForm_Load(object sender, EventArgs e)
{
    Task.Run(() => HeartBeatSender.SendHeartbeat());
    this.isRunningHeartbeat = true;
}


HeartBeatSender.cs
class HeartBeatSender
{
    public static async void SendHeartbeat()
    {
        while (true)
        {
            try
            {
                Dictionary<string, string> body = Cipher.GetHeartbeatEncryptedData("kk", "KakaoMap", MainLoginForm.activeNumber);
                HttpContent content = new FormUrlEncodedContent(body);

                string result = await Client.PostAsync("https://ckmauth.com/new/heartbeat", content);
                WriteLine(Thread.CurrentThread.ManagedThreadId); // 호출 안 됨
            }
            catch (Exception ex)
            {
                // 예외로도 안 빠짐
                MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace);
                await Task.Delay(5000);
            }
        }
    }
}


Cipher.cs
public static Dictionary<string, string> GetHeartbeatEncryptedData(string id, string programType, string activeNumber)
{
    using (Aes aes = Aes.Create())
    {
        aes.KeySize = 128;
        aes.IV = Encoding.UTF8.GetBytes("ckminitialvector");
        aes.Key = Encoding.UTF8.GetBytes("ckminitialkeyckm");

        return new Dictionary<string, string>()
        {
            { "i1", EncryptStringToBase64_Aes(id, aes.Key, aes.IV) },
            { "i2", EncryptStringToBase64_Aes(programType, aes.Key, aes.IV) },
            { "i3", EncryptStringToBase64_Aes(activeNumber, aes.Key, aes.IV) },
        };
    }
}


Client.cs
public static async Task<string> PostAsync(string url, HttpContent paylaod)
{
    try
    {
        using (HttpResponseMessage response = await client.PostAsync(url, paylaod)) // PostAsnyc 호출 후 교착 발생
        {
            WriteLine(Thread.CurrentThread.ManagedThreadId); // 여기부터 호출 안 됨
            string result = await response.Content.ReadAsStringAsync();
            return result;
        }
    }
    catch (Exception ex)
    {
        // 예외로도 안 빠짐
        MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace);
    }

    return null;
}


MainLoginForm.cs
partial class MainLoginForm : Form
{
    public static string activeNumber = "2"
}








[최초 등록일: ]
[최종 수정일: 7/16/2024]


비밀번호

댓글 작성자
 



2024-07-16 03시53분
조각 코드 말고 재현 코드("https://www.sysnet.pe.kr/2/0/11452")를 올려주세요.

일례로, 위와 같은 식으로 Task.Run에서 while 루프를 돌며 http 호출을 했다고 해서 일반적으로는 교착 상태에 빠지진 않을 것입니다. 그러니 제가 저 코드만 가지고 답변할 수 없습니다.
정성태

... 46  47  48  49  50  51  52  53  54  55  56  57  58  59  [60]  ...
NoWriterDateCnt.TitleFile(s)
1161Ji Y...7/12/201319756안녕하세요? 음성인식 관련해서 질문있습니다, [2]
1160이상식7/12/201319872웹서비스 커넥션 풀 오류입니다. [6]
1159김덕성7/4/201328781C# 마샬링 관련 문의입니다 [3]
1157이상식6/26/201321812빌드시 오류인데 원인을 모르겠네요. [2]파일 다운로드1
1156정환나라6/20/201319356In-Process Side-By-Side 동작 원리는 어떻게 되는걸까요? [3]
1155MD워시퍼6/20/201318436안녕하세요. 한가지 궁금한 것이 있어서 문의를 드립니다. [1]
1154it 대...6/13/201321665무선 패킷 스니핑 프로그램 [1]
1153이상헌6/8/201319263죄송합니다;; 또다시 의문점이 생겨 질문드립니다. [1]
1152이상헌6/8/201318262넷두이노 플러스 펌웨어 다운로드가 안되네요;;; [1]
1151황기동6/5/201319534무선 패킷 전송관련 질문 [1]
1147이진권6/2/201319759c# 윈폼 facebook과 연동2 [1]
1144황은영5/29/201324036원격지 서버에서 COM+ 호출이 되지 않습니다. [7]
1143김선희5/28/201324759윈도우 8, 익스플로러 10, 64bit->32bit [1]
1142백지훈5/15/201320126음성인식 TTS 관련해서 질문드립니다 ㅜㅜ [2]파일 다운로드1
1141나그네5/10/201320266안녕하세요..전자세금 관련하여.. 보다보다 여기까지 왔습니다. [4]
1140이성환5/8/201320544제네릭과 배열 관련 기초 질문입니다. [11]
1139양영석5/3/201318898페이스북 로그인 관련하여.... [1]
1137김민현4/30/201318373Binary 구조체에 대한 Linq query 관련 질문입니다. [3]파일 다운로드1
1136박상영4/25/201320180ksc5601에서 지원하지않는 확장문자 찾는방법 [3]
1135sequ...4/16/201335736c# dll c++ 에서 사용하기 (event 사용) [17]
1134이성환4/12/201320147volatile 키워드 관련 질문입니다. [3]파일 다운로드1
1133서광석4/8/201323449vb.net 2010에서 배포시 문제점 확인 방법에 대한 질문드립니다 [1]
1131헤딩3/28/201325397IIS 처리 성능을 높이고 싶으면 풀의 proecss 수를 계속 늘리면 될까요? [1]
1130박재율3/27/201319847WCF 서비스가 종종 죽는데 도움좀 부탁드립니다 ㅠ [1]
1129이상민3/21/201324356안녕하세요...IE Embedded Smart Client가 Windows8에서 정상동작을 하지 않습니다. [8]
1125박홍균3/19/201316629안녕하십니까. visual studio 에서 TFS 접속 관련으로 궁금한 점 여쭤봅니다.
... 46  47  48  49  50  51  52  53  54  55  56  57  58  59  [60]  ...