๋๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ๋ฐ๊ธฐ ์ํด ํ ์์ ์ฝ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ์คํ์ดํฌ ์์
์ ํ๊ณ ์์๊ณ ์ฝ๊ฐ์ ์ด์ํ ๋์์ด ๋ฐ์ํ์ต๋๋ค. ๊ตฌ๋
์ ์์ฉ ํ๋ก๊ทธ๋จ์์ await
์ฌ์ฉํ์ฌ ํ๋ธ์์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ ๋ฉ์์ง ์์ ์ด ์ค์ง๋์์ต๋๋ค. ์ฒ์์ ์ด๊ฒ์ Subscribe
๋ฉ์๋๋ฅผ ์ฆ์ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ๋ฉ์์ง๋ฅผ ๋ฐ์ง ๋ชปํ๋ค๋ ๊ฒ์ ์๋ฏธํ์ง๋ง, ์์ธํ ์ดํด๋ณด๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๊น์ง _ํ๋ณตํ๊ฒ ์์ ํ ๊ฒ์
๋๋ค.
๋ฉ์๋๊ฐ ํธ์ถ ๋ ๋ .Wait()
๋์ await
๋ชจ๋ ๊ด์ฐฎ์ต๋๋ค.
์ด๊ฒ์ด ์ฝ์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์๊ณผ ๊ด๋ จ์ด ์๋์ง( SynchronizationContext
์๋ WPF ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ๋) ์๋๋ฉด C# SignalR ํด๋ผ์ด์ธํธ์ ๋ฌธ์ ์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
await hubProxy.Invoke("Foo");
์(๋ฅผ) ๋ฐ๊ณ ๋ฉ์์ง๋ฅผ ๊ณ์ ๋ฐ์ ์ ์์ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
await hubProxy.Invoke("Foo");
ํ๋ฉด ์ฐ๊ฒฐ์ด ๋์ด์ง๋๋ค.
```c#
์์
ํ๋ก๊ทธ๋จ
{
์ ์ ๋ฌดํจ Main()
{
์คํ().๋๊ธฐ();
}
์ ์ ๋น๋๊ธฐ ์์
์คํ()
{
Console.WriteLine("[๊ตฌ๋
์] ์
๋ ฅํ๋ ค๋ฉด Enter ํค๋ฅผ ๋๋ฅด์ญ์์ค...");
Console.ReadLine();
var hubConnection = new HubConnection("http://localhost:39103/");
var hubProxy = hubConnection.CreateHubProxy("MyHub");
hubProxy.On<string>("OnMessage", msg =>
{
Console.WriteLine($"Received: {msg}");
});
await hubConnection.Start();
// Receiving messages quite happily at this point
Console.WriteLine("And press Enter again to break the application...");
Console.ReadLine();
await hubProxy.Invoke("Foo", "Bar");
// NO MESSAGES FOR YOU!
Console.WriteLine("And press Enter to Exit, because computers...");
Console.ReadLine();
}
}
```
๋ด๊ฐ ์ด๊ฒ์ ๊ฑฑ์ ํ๋ ์ด์ ๋ ๋จ์ง ์คํ์ดํฌ์ ๋ถ๊ณผํ์ง๋ง ๋ด๊ฐ ์์ ํ๊ณ ์๋ ์ค์ ์๋น์ค๋ WPF ๋ฐ์คํฌํฑ ์์ฉ ํ๋ก๊ทธ๋จ๋ฟ๋ง ์๋๋ผ ASP.NET Web API ์๋น์ค์์๋ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๊ฒ์ ๋งค์ฐ ์๋ฌต์ ์ธ ๊ต์ฐฉ ์ํ์ ๋๋ค. ์ถ์ ์ ์ผ๋ฉด ์ด์ ์ฝ๋ฐฑ์ด ์์ง ์๋ฃ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ฝ๋ฐฑ๋ง ํธ์ถ๋์ง ์๊ณ ํด๋ผ์ด์ธํธ๊ฐ ๋ฉ์์ง๋ฅผ ๊ณ์ ์์ ํ๊ณ ์์์ ์ ์ ์์ต๋๋ค.
And press Enter to Exit, because computers...
16:44:27.6966075 - b8022975-3d42-4935-952d-7c43a392d049 - WS: OnMessage({"C":"d-59F20992-B,18|S,0|T,1","M":[{"H":"ChatHub","M":"broadcastMessage","A":["adfasf","sadf"]}]})
16:44:28.6936798 - b8022975-3d42-4935-952d-7c43a392d049 - WS: OnMessage({})
16:44:31.4080330 - b8022975-3d42-4935-952d-7c43a392d049 - WS: OnMessage({"C":"d-59F20992-B,19|S,0|T,1","M":[{"H":"ChatHub","M":"broadcastMessage","A":["adfasf","adfsa"]}]})
16:44:36.2056851 - b8022975-3d42-4935-952d-7c43a392d049 - OnError(Microsoft.AspNet.SignalR.Client.Infrastructure.SlowCallbackException: Possible deadlock detected. A callback registered with "HubProxy.On" or "Connection.Received" has been executing for at least 10 seconds.)
16:44:38.6935113 - b8022975-3d42-4935-952d-7c43a392d049 - WS: OnMessage({})
Console.ReadLine();
๋ฅผ await Console.In.ReadLineAsync()
๋ก ๋ณ๊ฒฝํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ์ ์ฝ๋๊ฐ TaskCompletionSource.SetResult(๋ก ์๋ฃ๋ ์์
๊ณผ ๋์ผํ ์ค๋ ๋์์ ์คํ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ). ํด๋ผ์ด์ธํธ๋ TCS๋ฅผ ์์ฑํ ๋ ์ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ์ค๋ ๋๋ก ๋ณด๋ด๊ฑฐ๋ TaskCreationOption.RunContinuationsAsynchronously
์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ด ์ค๋ ๋๋ ๊ฐ๋จํ ๋งํด์ ๋ด ๋น๋๊ธฐ ๋๊ธฐ ๊ฒฝํ์ ๋๋ค.
e55b89a45618d222e2c37a3b14969923c998899b์์ ์์ ๋จ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
e55b89a45618d222e2c37a3b14969923c998899b์์ ์์ ๋จ