Microsoft MVP성태의 닷넷 이야기
선생님 안녕하세요 async await 교착 관련 질문입니다 [링크 복사], [링크+제목 복사],
조회: 10049
글쓴 사람
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 호출을 했다고 해서 일반적으로는 교착 상태에 빠지진 않을 것입니다. 그러니 제가 저 코드만 가지고 답변할 수 없습니다.
정성태

... 91  92  93  [94]  95  96  97 
NoWriterDateCnt.TitleFile(s)
119김용국3/22/20059726                    답변글 [답변]: 정상태님 아주 잘 해결 되었습니다.... 감사합니다!
108guest3/17/20059909닷넷 프레임워크 배포
111정성태3/19/200510308    답변글 [답변]: 닷넷 프레임워크 배포
107안연준3/17/20059529[-_-]스마트 클라이언트에 관련 된 질문[-_-]
110정성태3/19/200510415    답변글 [답변]: [-_-]스마트 클라이언트에 관련 된 질문[-_-]
116안연준3/21/20059893        답변글 [답변]: 친절한 답변 고맙습니다.
98김용국3/18/200511700정성태님... 연결이 준비됬습니다
99정성태3/2/200512549    답변글 [답변]: 정성태님... 연결이 준비됬습니다
100김용국3/18/20059587        답변글 [답변]: 죄송합니다! 급히올리느라 file path의 변경을 하지않고 그냥올렸네요....!
101정성태3/2/20059853            답변글 [답변]: [답변]: 죄송합니다! 급히올리느라 file path의 변경을 하지않고 그냥올렸네요....!
102김용국3/18/20059897                답변글 [답변]: 거듭죄송하네요..... 후~~~주소를 변경하고 빌드를 다시 했습니다....
103정성태3/2/20059771                    답변글 [답변]: [답변]: 거듭죄송하네요..... 후~~~주소를 변경하고 빌드를 다시 했습니다....
104김용국3/2/20059875                        답변글 [답변]: 네... 빨리 검토해 봐 주셔서 감사합니다~~
105정성태3/2/20059075                            답변글 [답변]: [답변]: 네... 빨리 검토해 봐 주셔서 감사합니다~~
106김용국3/2/20059579                                답변글 [답변]: 답변감사합니다!
91김용국2/28/200511309IE에 WindowsFormControl을 올려 실행하면 이런에러가 나네요???파일 다운로드1
92정성태2/28/200512585    답변글 [답변]: IE에 WindowsFormControl을 올려 실행하면 이런에러가 나네요???
93김용국2/28/200511565        답변글 [답변]: 답변감사합니다... 재질문을 드립니다
94정성태2/28/200512181            답변글 [답변]: [답변]: 답변감사합니다... 재질문을 드립니다
95김용국2/28/200512197                답변글 [답변]: IE주소창에서 해당주소로 실행을 해보니....디버깅 PopUp화면이...^
96정성태2/28/200511254                    답변글 [답변]: [답변]: IE주소창에서 해당주소로 실행을 해보니....디버깅 PopUp화면이...^
97김용국3/1/200511789                        답변글 [답변]: 준비되는데로 말씀드리겠습니다 ^^
88안지환2/22/200513301^^ 사이트 잘 들러보았습니다.
89정성태2/22/200513290    답변글 [답변]: ^^ 사이트 잘 들러보았습니다.
85한기열2/22/200511917정성태님 홈같은 부드러운 페이지 넘김?은 어떻게 구현하나요?
86정성태2/22/200512606    답변글 [답변]: 정성태님 홈같은 부드러운 페이지 넘김?은 어떻게 구현하나요? [2]
... 91  92  93  [94]  95  96  97