की पसंद मैं जिस तरह से संकलक जब async खोजशब्द का उपयोग कर संकलन TaskScheduler चयन के पीछे तर्क जानना चाहूंगा।async कीवर्ड और TaskScheduler
ऑन-कनेक्टेडएसिंक विधि पर मेरा परीक्षण विधि सिग्नलआर (एएसपी.नेट होस्ट, आईआईएस 8, वेबस्केट ट्रांसपोर्ट) द्वारा बुलाया जाता है।
protected override async Task OnConnectedAsync(IRequest request, string connectionId)
{
SendUpdates();
}
वर्तमान तुल्यकालन संदर्भ पर एक काम शुरू) System.Web.AspNetSynchronizationContext.OperationStarted में एक InvalidOperationException (
एक अतुल्यकालिक आपरेशन इस समय प्रारंभ नहीं किया जा सकता है के लिए परिणाम देगा। असीमित संचालन केवल एक एसिंक्रोनस हैंडलर या मॉड्यूल के भीतर या पृष्ठ जीवन चक्र में कुछ घटनाओं के दौरान शुरू किया जा सकता है। यदि कोई पृष्ठ निष्पादित करते समय यह अपवाद हुआ, तो सुनिश्चित करें कि पृष्ठ
<%@ Page Async="true" %>
चिह्नित है।
ठीक। इस SendUpdates परिभाषा के साथ, मुझे उपरोक्त अपवाद मिलता है:
private async void SendUpdates()
{
Task.Run(async() =>
{
while (true)
{
await Task.Delay(1000);
await Connection.Broadcast("blabla");
}
});
}
लेकिन मुझे और भी दिलचस्प बात यह है कि मुझे अपवाद नहीं मिलता है। निम्नलिखित काम करता है:
private void SendUpdates()
और निम्न कार्य भी
private async Task SendUpdates()
यह पिछले एक भी काम करता है, लेकिन यह अनिवार्य रूप से ऊपर के उदाहरण के रूप में ही है।
private Task SendUpdates()
{
return Task.Run(async() =>
{
while (true)
{
await Task.Delay(1000);
await Connection.Broadcast("blabla");
}
});
}
आप जानते हैं कि कैसे संकलक जो अनुसूचक यहाँ का उपयोग करना चुनते हैं?
यह उत्तर है, धन्यवाद – Xin