คำถามติดแท็ก c#-5.0

สำหรับปัญหาเกี่ยวกับการพัฒนาด้วย C # เวอร์ชัน 5.0

24
ฉันจะใช้วิธีการทำงานของ async <T> แบบซิงโครนัสได้อย่างไร
ฉันเรียนรู้เกี่ยวกับ async / คอยและพบกับสถานการณ์ที่ฉันต้องเรียกวิธีการ async พร้อมกัน ฉันจะทำสิ่งนั้นได้อย่างไร วิธีการซิงค์: public async Task&lt;Customers&gt; GetCustomers() { return await Service.GetCustomersAsync(); } การใช้งานปกติ: public async void GetCustomers() { customerList = await GetCustomers(); } ฉันได้ลองใช้สิ่งต่อไปนี้: Task&lt;Customer&gt; task = GetCustomers(); task.Wait() Task&lt;Customer&gt; task = GetCustomers(); task.RunSynchronously(); Task&lt;Customer&gt; task = GetCustomers(); while(task.Status != TaskStatus.RanToCompletion) ฉันลองใช้คำแนะนำจากที่นี่แต่มันไม่ทำงานเมื่อโปรแกรมเลือกจ่ายงานอยู่ในสถานะถูกระงับ public static void …

5
ใช้ async / รอหลายงาน
ฉันใช้ไคลเอนต์ API ที่ไม่สมบูรณ์อย่างสมบูรณ์นั่นคือการดำเนินการแต่ละอย่างกลับมาTaskหรือTask&lt;T&gt;เช่น: static async Task DoSomething(int siteId, int postId, IBlogClient client) { await client.DeletePost(siteId, postId); // call API client Console.WriteLine("Deleted post {0}.", siteId); } การใช้ตัวดำเนินการ async / await C # 5 วิธีที่ถูกต้อง / มีประสิทธิภาพมากที่สุดในการเริ่มงานหลาย ๆ อย่างและรอให้พวกเขาทั้งหมดดำเนินการให้เสร็จสิ้นคืออะไร: int[] ids = new[] { 1, 2, 3, 4, 5 }; Parallel.ForEach(ids, i …

3
คุณต้องวาง Task.Run ลงในเมธอดเพื่อทำให้เป็น async หรือไม่?
ฉันพยายามที่จะเข้าใจ async ที่รอในรูปแบบที่ง่ายที่สุด ฉันต้องการสร้างวิธีง่าย ๆ ที่เพิ่มตัวเลขสองตัวเพื่อประโยชน์ของตัวอย่างนี้ได้รับไม่มีเวลาในการประมวลผลเลยมันเป็นเพียงเรื่องของการสร้างตัวอย่างที่นี่ ตัวอย่างที่ 1 private async Task DoWork1Async() { int result = 1 + 2; } ตัวอย่างที่ 2 private async Task DoWork2Async() { Task.Run( () =&gt; { int result = 1 + 2; }); } หากฉันรอDoWork1Async()รหัสจะทำงานพร้อมกันหรือไม่ตรงกัน? ฉันจำเป็นต้องรวมโค้ดการซิงค์ไว้ด้วยTask.Runเพื่อให้วิธีนี้ไม่สามารถรอได้และแบบอะซิงโครนัสเพื่อไม่ให้บล็อกเธรด UI หรือไม่ ฉันพยายามที่จะคิดออกว่าวิธีการของฉันเป็นTaskหรือTask&lt;T&gt;ฉันจะต้องห่อรหัสด้วยTask.Runเพื่อให้มันไม่ตรงกัน คำถามโง่ฉันแน่ใจ แต่ผมดูตัวอย่างในสุทธิที่ผู้คนกำลังรอรหัสที่มีอะไร async ภายในและไม่ได้อยู่ในห่อหรือTask.RunStartNew

3
คุณจะสร้างวิธีแบบอะซิงโครนัสใน C # ได้อย่างไร
โพสต์บล็อกทุกรายการที่ฉันอ่านจะบอกวิธีใช้อะซิงโครนัสเมธอดใน C # แต่ด้วยเหตุผลแปลก ๆ บางอย่างไม่เคยอธิบายวิธีการสร้างวิธีอะซิงโครนัสของคุณเองเพื่อบริโภค ดังนั้นฉันมีรหัสนี้ทันทีที่ใช้วิธีการของฉัน: private async void button1_Click(object sender, EventArgs e) { var now = await CountToAsync(1000); label1.Text = now.ToString(); } และฉันเขียนวิธีนี้คือCountToAsync: private Task&lt;DateTime&gt; CountToAsync(int num = 1000) { return Task.Factory.StartNew(() =&gt; { for (int i = 0; i &lt; num; i++) { Console.WriteLine("#{0}", i); } }).ContinueWith(x …
196 c#  async-await  c#-5.0 

4
async C # 5 CTP: ทำไม“ สถานะ” ภายในถูกตั้งค่าเป็น 0 ในรหัสที่สร้างขึ้นก่อนการโทร EndAwait
เมื่อวานนี้ฉันได้พูดคุยเกี่ยวกับคุณลักษณะใหม่ของ "async" C โดยเฉพาะอย่างยิ่งการตรวจสอบสิ่งที่สร้างรหัสดูเหมือนและthe GetAwaiter()/ BeginAwait()/ EndAwait()โทร เราดูรายละเอียดที่เครื่องสถานะที่สร้างโดยคอมไพเลอร์ C # และมีสองด้านที่เราไม่เข้าใจ: เหตุใดคลาสที่สร้างขึ้นจึงมีDispose()เมธอดและ$__disposingตัวแปรซึ่งไม่เคยปรากฏที่จะใช้ (และคลาสไม่ได้นำไปใช้IDisposable) สาเหตุที่stateตัวแปรภายในถูกตั้งค่าเป็น 0 ก่อนการเรียกใด ๆEndAwait()เมื่อโดยปกติ 0 ปรากฏว่าหมายถึง "นี่คือจุดเริ่มต้น" ฉันสงสัยว่าจุดแรกสามารถตอบได้โดยทำสิ่งที่น่าสนใจมากขึ้นในวิธีการ async ถึงแม้ว่าหากใครมีข้อมูลเพิ่มเติมฉันก็ยินดีที่จะได้ยิน อย่างไรก็ตามคำถามนี้เกี่ยวกับประเด็นที่สองมากกว่า นี่คือตัวอย่างโค้ดที่ง่ายมาก: using System.Threading.Tasks; class Test { static async Task&lt;int&gt; Sum(Task&lt;int&gt; t1, Task&lt;int&gt; t2) { return await t1 + await t2; } } ... และนี่คือรหัสที่ได้รับการสร้างขึ้นสำหรับMoveNext()วิธีการที่ใช้เครื่องรัฐ สิ่งนี้ถูกคัดลอกโดยตรงจาก Reflector …
195 c#  asynchronous  c#-5.0 

6
มี async ใด ๆ เทียบเท่ากับ Process.Start?
เช่นเดียวกับชื่อเรื่องที่แนะนำมีความเทียบเท่าProcess.Start(อนุญาตให้คุณเรียกใช้แอพพลิเคชั่นหรือไฟล์แบตช์) ที่ฉันรอได้ไหม ฉันกำลังเล่นกับแอปคอนโซลขนาดเล็กและดูเหมือนว่าเป็นสถานที่ที่เหมาะที่จะใช้ async และรออยู่ แต่ฉันไม่พบเอกสารใด ๆ สำหรับสถานการณ์นี้ สิ่งที่ฉันคิดคือบางสิ่งบางอย่างตามบรรทัดเหล่านี้: void async RunCommand() { var result = await Process.RunAsync("command to run"); }
141 c#  async-await  c#-5.0 

5
ใช้ async-await บน. net 4
ขณะนี้ฉันเริ่มสร้างแอปพลิเคชันที่จะได้รับประโยชน์มากมายจากคุณลักษณะ async ที่รอคอยของ C # 5 แต่ฉันไม่แน่ใจว่าเวอร์ชัน VS และรันไทม์ async ที่จะใช้ เมื่อดูที่ชาร์ตยอดนิยมของ OS ฉันจะต้องรองรับ Windows XP อีกสามปี ดูเหมือนว่า. net 4.5 จะทำงานบน Windows รุ่นใหม่กว่าเท่านั้นดังนั้นฉันต้องกำหนดเป้าหมาย. net 4.0 เครื่องพัฒนาใช้ Windows 7 ดังนั้นการใช้ VS เวอร์ชันที่ใหม่กว่าจึงไม่ใช่ปัญหา ตอนนี้ฉันต้องเลือกคอมไพเลอร์ก่อนเพื่อทำสิ่งนี้: VS2010 พร้อม AsyncCTP ดูตัวอย่าง VS2012 (และสุดท้ายเมื่อมาถึง) ตั้งค่าเป้าหมายเป็น. net 4.0 Mono (ดูเหมือนว่า 2.12 มี async-await, ฉันชอบ / ฉันคุ้นเคยกับ VS …

6
ฉันจะปิดใช้งานการสนับสนุน C # 6 ใน Visual Studio 2015 ได้อย่างไร
พื้นหลัง เรามีโครงการที่เรากำลังพัฒนาในปี 2015 ด้วยการเปิดใช้งาน C # 6 ซึ่งบางครั้งจำเป็นต้องเปิดโดยนักพัฒนาที่ใช้ VS 2013 โดยไม่มี C # 6 เราไม่มีความตั้งใจที่จะใช้ C # 6 ภายในโซลูชันนี้ (เท่าที่ฉันต้องการ) ปัญหา Visual Studio และ ReSharper แนะนำการสร้างภาษา C # 6 ที่เป็นประโยชน์ซึ่งทำให้การแก้ไขไม่สามารถใช้งานได้ใน Visual Studio รุ่นก่อนหน้าโดยไม่มีการสนับสนุน C # 6 ฉันได้ปิดการใช้งานการสนับสนุน ReSharper C # 6 แล้วแต่ฉันไม่สามารถปิดการใช้งาน / จำกัด คุณสมบัติ C # ในโซลูชันทั้งหมด คำถาม ฉันจะ …

2
คุณใช้วิธีการมอบหมายการดำเนินการ async อย่างไร
ข้อมูลพื้นฐานเล็กน้อย ฉันกำลังเรียนรู้ Web API stack และฉันกำลังพยายามห่อหุ้มข้อมูลทั้งหมดในรูปแบบของออบเจ็กต์ "Result" ด้วยพารามิเตอร์เช่น Success และ ErrorCodes อย่างไรก็ตามวิธีการที่แตกต่างกันจะให้ผลลัพธ์และรหัสข้อผิดพลาดที่แตกต่างกัน แต่โดยทั่วไปวัตถุผลลัพธ์จะถูกสร้างอินสแตนซ์ในลักษณะเดียวกัน เพื่อประหยัดเวลาและเรียนรู้เพิ่มเติมเกี่ยวกับความสามารถ async / await ใน C # ฉันพยายามที่จะรวมเนื้อหาวิธีการทั้งหมดของการกระทำเว็บ api ของฉันในตัวแทนการกระทำแบบอะซิงโครนัส แต่ติดอยู่ในอุปสรรคเล็กน้อย ... ให้ชั้นเรียนต่อไปนี้: public class Result { public bool Success { get; set; } public List&lt;int&gt; ErrorCodes{ get; set; } } public async Task&lt;Result&gt; GetResultAsync() { return …

2
Task <int> กลายเป็น int ได้อย่างไร?
เรามีวิธีนี้: async Task&lt;int&gt; AccessTheWebAsync() { HttpClient client = new HttpClient(); Task&lt;string&gt; getStringTask = client.GetStringAsync("http://msdn.microsoft.com"); // You can do work here that doesn't rely on the string from GetStringAsync. DoIndependentWork(); string urlContents = await getStringTask; //The thing is that this returns an int to a method that has a return type …

9
ไซต์หยุดทำงานในระบบ asp.net WebWebPages.Razor.Configuration.HostSection ไม่สามารถส่งไปยัง
ฉันมีปัญหาเช่นนี้บนเซิร์ฟเวอร์ [A] System.WebWebPages.Razor.Configuration.HostSection ไม่สามารถส่งไปยัง [B] System.WebWebPages.Razor.Configuration.HostSection ประเภท A มาจาก 'System.Web.WebPages.Razor เวอร์ชัน = 2.0.0.0 วัฒนธรรม = เป็นกลาง PublicKeyToken = 31bf3856ad364e35' ในบริบท 'ค่าเริ่มต้น' ที่ตำแหน่ง 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll' ประเภท B มาจาก 'System.Web.WebPages.Razor เวอร์ชัน = 1.0.0.0 วัฒนธรรม = เป็นกลาง PublicKeyToken = …

9
เป็นไปได้หรือไม่ที่จะ“ รอผลตอบแทน DoSomethingAsync ()”
บล็อกตัวทำซ้ำปกติ (เช่น "ผลตอบแทน") ไม่เข้ากันกับ "async" และ "await" หรือไม่ สิ่งนี้ให้ความคิดที่ดีว่าฉันพยายามจะทำอะไร: async Task&lt;IEnumerable&lt;Foo&gt;&gt; Method(String [] Strs) { // I want to compose the single result to the final result, so I use the SelectMany var finalResult = UrlStrings.SelectMany(link =&gt; //i have an Urlstring Collection await UrlString.DownLoadHtmlAsync() //download single result; DownLoadHtmlAsync method will …

5
เหตุใดการกระทำ async จึงหยุดทำงาน
ฉันมีหลายชั้นสุทธิ 4.5 โปรแกรมประยุกต์ที่เรียกวิธีการใช้ C # 's ใหม่asyncและawaitคำหลักที่เพิ่งแฮงค์และผมก็ไม่สามารถดูว่าทำไม ที่ด้านล่างฉันมีวิธีการ async ที่ขยายยูทิลิตี้ฐานข้อมูลของเราOurDBConn(โดยทั่วไปจะเป็น wrapper สำหรับพื้นฐานDBConnectionและDBCommandวัตถุ): public static async Task&lt;T&gt; ExecuteAsync&lt;T&gt;(this OurDBConn dataSource, Func&lt;OurDBConn, T&gt; function) { string connectionString = dataSource.ConnectionString; // Start the SQL and pass back to the caller until finished T result = await Task.Run( () =&gt; { // Copy the …

5
ตัวอย่าง async / await ที่ทำให้เกิดการชะงักงัน
ฉันพบแนวทางปฏิบัติที่ดีที่สุดสำหรับการเขียนโปรแกรมแบบอะซิงโครนัสโดยใช้ c # async/ awaitคำหลัก (ฉันเพิ่งเริ่มใช้ c # 5.0) หนึ่งในคำแนะนำที่ได้รับมีดังต่อไปนี้: ความเสถียร: รู้บริบทการซิงโครไนซ์ของคุณ ... บริบทการซิงโครไนซ์บางส่วนไม่ได้ reentrant และ single-threaded ซึ่งหมายความว่าสามารถทำงานได้เพียงหน่วยเดียวในบริบทในช่วงเวลาที่กำหนด ตัวอย่างนี้คือเธรด UI ของ Windows หรือบริบทการร้องขอ ASP.NET ในบริบทการซิงโครไนซ์แบบเธรดเดี่ยวเหล่านี้คุณสามารถหยุดชะงักได้โดยง่าย หากคุณวางภารกิจจากบริบทเธรดเดียวให้รองานนั้นในบริบทรหัสรอของคุณอาจบล็อกงานเบื้องหลัง public ActionResult ActionAsync() { // DEADLOCK: this blocks on the async task var data = GetDataAsync().Result; return View(data); } private async Task&lt;string&gt; GetDataAsync() { …

2
การห่อรหัสซิงโครนัสเป็นการโทรแบบอะซิงโครนัส
ฉันมีวิธีการในแอปพลิเคชัน ASP.NET ซึ่งใช้เวลาค่อนข้างมากในการดำเนินการ การเรียกใช้เมธอดนี้อาจเกิดขึ้นได้สูงสุด 3 ครั้งระหว่างคำขอของผู้ใช้หนึ่งครั้งขึ้นอยู่กับสถานะแคชและพารามิเตอร์ที่ผู้ใช้ระบุ การโทรแต่ละครั้งจะใช้เวลาประมาณ 1-2 วินาทีจึงจะเสร็จสมบูรณ์ วิธีนี้เป็นการโทรแบบซิงโครนัสไปยังบริการและไม่มีความเป็นไปได้ที่จะลบล้างการใช้งาน ดังนั้นการโทรแบบซิงโครนัสไปยังบริการจึงมีลักษณะดังนี้: public OutputModel Calculate(InputModel input) { // do some stuff return Service.LongRunningCall(input); } และการใช้วิธีการคือ (โปรดทราบว่าการเรียกใช้เมธอดนั้นอาจเกิดขึ้นมากกว่าหนึ่งครั้ง): private void MakeRequest() { // a lot of other stuff: preparing requests, sending/processing other requests, etc. var myOutput = Calculate(myInput); // stuff again } ฉันพยายามเปลี่ยนการใช้งานจากด้านข้างของฉันเพื่อให้สามารถใช้งานวิธีนี้ได้พร้อมกันและนี่คือสิ่งที่ฉันทำจนถึงตอนนี้ …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.