คำถามติดแท็ก task-parallel-library

Task Parallel Library เป็นส่วนหนึ่งของ. NET Framework ตั้งแต่. NET 4 มันเป็นชุดของ API เพื่อให้นักพัฒนาสามารถเขียนโปรแกรมแอปพลิเคชันแบบอะซิงโครนัส

4
วิธีปฏิบัติที่ดีที่สุดในการโทร ConfigureAwait สำหรับรหัสฝั่งเซิร์ฟเวอร์ทั้งหมด
เมื่อคุณมีรหัสฝั่งเซิร์ฟเวอร์ (เช่นบางส่วนApiController) และฟังก์ชั่นของคุณจะไม่ตรงกัน - เพื่อให้พวกเขากลับมาTask<SomeObject>- มันถือว่าเป็นวิธีที่ดีที่สุดว่าเวลาที่คุณรอคอยฟังก์ชั่นที่คุณโทรหาConfigureAwait(false)? ฉันได้อ่านว่ามันมีประสิทธิภาพมากกว่าเพราะไม่ต้องสลับบริบทของเธรดกลับไปเป็นบริบทของเธรดดั้งเดิม อย่างไรก็ตามด้วย ASP.NET Web Api หากคำขอของคุณเข้ามาในเธรดเดียวและคุณรอฟังก์ชั่นและการโทรConfigureAwait(false)ที่อาจทำให้คุณอยู่ในเธรดอื่นเมื่อคุณส่งคืนผลลัพธ์สุดท้ายของApiControllerฟังก์ชัน ฉันได้พิมพ์ตัวอย่างของสิ่งที่ฉันพูดถึงด้านล่าง: public class CustomerController : ApiController { public async Task<Customer> Get(int id) { // you are on a particular thread here var customer = await SomeAsyncFunctionThatGetsCustomer(id).ConfigureAwait(false); // now you are on a different thread! will that cause problems? …

9
หากอินเทอร์เฟซของฉันต้องส่งคืนงานเป็นวิธีที่ดีที่สุดในการปรับใช้งานที่ไม่ดำเนินการอย่างไร
ในโค้ดด้านล่างเนื่องจากอินเทอร์เฟซคลาสLazyBarจะต้องส่งคืนภารกิจจากเมธอดของมัน (และสำหรับเหตุผลที่ไม่สามารถเปลี่ยนแปลงได้) หากLazyBarการติดตั้งใช้งานผิดปกติเกิดขึ้นกับการทำงานที่รวดเร็วและพร้อมกัน - วิธีใดที่ดีที่สุดในการส่งคืนภารกิจที่ไม่มีการดำเนินการจากเมธอด? ฉันได้ไปTask.Delay(0)ข้างล่างนี้ แต่ฉันอยากจะรู้ว่าสิ่งนี้มีผลข้างเคียงของการทำงานหรือไม่ถ้าฟังก์ชั่นนี้มีการเรียกใช้มาก (เพื่อประโยชน์ในการโต้แย้งพูดหลายร้อยครั้งต่อวินาที): น้ำตาลซินแทติกติกนี้ไม่ทำให้ลมออกมาเป็นเรื่องใหญ่หรือไม่? มันเริ่มอุดตันกลุ่มแอปพลิเคชันของฉันหรือไม่ คอมไพเลอร์มีดเพียงพอที่จะจัดการกับDelay(0)แตกต่างกันหรือไม่? จะreturn Task.Run(() => { });แตกต่างกันอย่างไร มีวิธีที่ดีกว่า? using System.Threading.Tasks; namespace MyAsyncTest { internal interface IFooFace { Task WillBeLongRunningAsyncInTheMajorityOfImplementations(); } /// <summary> /// An implementation, that unlike most cases, will not have a long-running /// operation in 'WillBeLongRunningAsyncInTheMajorityOfImplementations' /// </summary> internal …

5
ใช้ async / รอหลายงาน
ฉันใช้ไคลเอนต์ API ที่ไม่สมบูรณ์อย่างสมบูรณ์นั่นคือการดำเนินการแต่ละอย่างกลับมาTaskหรือTask<T>เช่น: 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 …

15
รอแบบอะซิงโครนัสสำหรับงาน <T> เพื่อให้หมดเวลา
ฉันต้องการรอให้ภารกิจ &lt;T&gt;เสร็จสมบูรณ์ด้วยกฎพิเศษบางอย่าง: หากยังไม่เสร็จหลังจาก X มิลลิวินาทีฉันต้องการแสดงข้อความถึงผู้ใช้ และถ้ามันยังไม่เสร็จสมบูรณ์หลังจาก Y มิลลิวินาทีผมต้องการที่จะทำงานโดยอัตโนมัติยกเลิกคำขอ ฉันสามารถใช้Task.ContinueWithเพื่อรอแบบอะซิงโครนัสเพื่อให้งานเสร็จสมบูรณ์ (เช่นกำหนดเวลาการดำเนินการที่จะดำเนินการเมื่องานเสร็จสมบูรณ์) แต่ไม่อนุญาตให้ระบุการหมดเวลา ฉันสามารถใช้Task.Waitเพื่อรองานให้เสร็จสมบูรณ์พร้อมกับการหมดเวลา แต่จะบล็อกเธรดของฉัน ฉันจะรอแบบอะซิงโครนัสเพื่อให้งานเสร็จสมบูรณ์ด้วยการหมดเวลาได้อย่างไร

4
เมื่อใดที่จะใช้ Task.Delay เมื่อใดที่จะใช้งาน Thread.Sleep
มีกฎที่ดีหรือไม่ที่จะใช้งานTaskDelayกับThread.Sleepเมื่อใด โดยเฉพาะมีค่าต่ำสุดที่จะให้เพื่อให้มีประสิทธิภาพ / มีประสิทธิภาพเหนืออื่น ๆ ? สุดท้ายเนื่องจาก Task.Delay ทำให้เกิดการสลับบริบทบนเครื่อง async / await มีค่าใช้จ่ายหรือไม่

8
ความแตกต่างระหว่างงานและด้ายคืออะไร?
ใน C # 4.0 เรามีTaskในSystem.Threading.Tasks namespace ความแตกต่างที่แท้จริงระหว่างThreadและTaskคืออะไร ฉันทำโปรแกรมตัวอย่าง (ความช่วยเหลือจาก MSDN) เพื่อการเรียนรู้ด้วยตัวเอง Parallel.Invoke Parallel.For Parallel.ForEach แต่มีข้อสงสัยมากมายเนื่องจากแนวคิดไม่ชัดเจน ฉันเคยค้นหาใน Stackoverflow สำหรับคำถามประเภทเดียวกัน แต่อาจอยู่กับชื่อคำถามนี้ฉันไม่สามารถได้รับเหมือนกัน หากใครรู้เกี่ยวกับคำถามประเภทเดียวกันที่โพสต์ไว้ที่นี่ก่อนหน้านี้โปรดให้ข้อมูลอ้างอิงจากลิงก์

4
WaitAll vs WhenAll
ความแตกต่างระหว่างTask.WaitAll()และTask.WhenAll()จาก Async CTP คืออะไร? คุณสามารถให้รหัสตัวอย่างเพื่อแสดงกรณีการใช้ที่แตกต่างกันได้หรือไม่?

4
ฉันจะบอก Moq ให้ส่งคืนภารกิจได้อย่างไร
ฉันมีอินเตอร์เฟซที่ประกาศ Task DoSomethingAsync(); ฉันใช้ MoqFramework สำหรับการทดสอบ: [TestMethod()] public async Task MyAsyncTest() { Mock&lt;ISomeInterface&gt; mock = new Mock&lt;ISomeInterface&gt;(); mock.Setup(arg =&gt; arg.DoSomethingAsync()).Callback(() =&gt; { &lt;my code here&gt; }); ... } await DoSomethingAsync()จากนั้นในการทดสอบของฉันฉันรันโค้ดที่จะเรียก และการทดสอบล้มเหลวในบรรทัดนั้น ผมทำอะไรผิดหรือเปล่า?

11
วิธีการโทรอย่างปลอดภัยวิธี async ใน C # โดยไม่ต้องรอ
ฉันมีasyncวิธีการที่ไม่ส่งคืนข้อมูล: public async Task MyAsyncMethod() { // do some stuff async, don't return any data } ฉันกำลังเรียกสิ่งนี้จากวิธีอื่นซึ่งคืนค่าข้อมูลบางอย่าง public string GetStringData() { MyAsyncMethod(); // this generates a warning and swallows exceptions return "hello world"; } การโทรMyAsyncMethod()โดยไม่รอมันทำให้เกิด " เพราะการโทรนี้ไม่รอวิธีการปัจจุบันยังคงทำงานก่อนที่การโทรจะเสร็จสิ้น " เตือนใน visual studio ในหน้าคำเตือนนั้นระบุว่า: คุณควรพิจารณาปราบปรามเตือนเฉพาะถ้าคุณแน่ใจว่าคุณไม่ต้องการที่จะรอให้สายตรงกันที่จะเสร็จสมบูรณ์และว่าวิธีการที่เรียกว่าจะไม่เพิ่มข้อยกเว้นใด ๆ ฉันแน่ใจว่าฉันไม่ต้องการรอให้การโทรเสร็จสมบูรณ์ ฉันไม่ต้องการหรือมีเวลา แต่การโทรอาจเพิ่มข้อยกเว้น ฉันพบปัญหานี้สองสามครั้งและฉันแน่ใจว่าเป็นปัญหาทั่วไปที่ต้องมีวิธีแก้ไขปัญหาร่วมกัน ฉันจะเรียกวิธีการ async …

4
การรอการดำเนินการแบบอะซิงโครนัสพร้อมกันและทำไม Wait () ทำให้โปรแกรมค้างที่นี่
คำนำ : ฉันกำลังมองหาคำอธิบายไม่ใช่แค่ทางออก ฉันรู้วิธีแก้ปัญหาแล้ว แม้ว่าจะใช้เวลาหลายวันในการศึกษาบทความ MSDN เกี่ยวกับ Asynchronous Pattern (TAP) แบบใช้งาน, async และรอฉันยังคงสับสนเล็กน้อยเกี่ยวกับรายละเอียดปลีกย่อยบางส่วน ฉันกำลังเขียนตัวบันทึกสำหรับแอพ Windows Store และฉันต้องการสนับสนุนทั้งการบันทึกแบบอะซิงโครนัสและการซิงโครนัส วิธีการแบบอะซิงโครนัสตาม TAP วิธีการแบบอะซิงโครนัสควรซ่อนทั้งหมดนี้และดูและทำงานเหมือนกับวิธีการทั่วไป นี่คือวิธีการหลักของการบันทึกแบบอะซิงโครนัส: private async Task WriteToLogAsync(string text) { StorageFolder folder = ApplicationData.Current.LocalFolder; StorageFile file = await folder.CreateFileAsync("log.log", CreationCollisionOption.OpenIfExists); await FileIO.AppendTextAsync(file, text, Windows.Storage.Streams.UnicodeEncoding.Utf8); } ตอนนี้วิธีการซิงโครนัสที่สอดคล้องกัน ... รุ่น 1 : private void WriteToLog(string …

6
ตรวจจับข้อยกเว้นที่ถูกโยนโดยวิธีการ void async
การใช้ async CTP จาก Microsoft สำหรับ. NET เป็นไปได้หรือไม่ที่จะรับข้อยกเว้นที่เกิดจากวิธี async ในวิธีการโทร? public async void Foo() { var x = await DoSomethingAsync(); /* Handle the result, but sometimes an exception might be thrown. For example, DoSomethingAsync gets data from the network and the data is invalid... a ProtocolException might be thrown. */ …

4
Parallel.ForEach เทียบกับ Task.Fartory.StartNew
ความแตกต่างระหว่างตัวอย่างโค้ดด้านล่างคืออะไร ทั้งสองจะไม่ใช้เธรดพูลหรือไม่ เช่นถ้าฉันต้องการเรียกใช้ฟังก์ชันสำหรับแต่ละรายการในคอลเลกชัน Parallel.ForEach&lt;Item&gt;(items, item =&gt; DoSomething(item)); vs foreach(var item in items) { Task.Factory.StartNew(() =&gt; DoSomething(item)); }

8
ใช้งาน async หลายงานและรอให้การดำเนินการทั้งหมดเสร็จสมบูรณ์
ฉันต้องเรียกใช้งาน async หลายรายการในแอปพลิเคชันคอนโซลและรอให้งานทั้งหมดดำเนินการจนเสร็จสิ้น มีบทความมากมายที่นั่น แต่ฉันดูเหมือนจะสับสนมากยิ่งฉันอ่าน ฉันได้อ่านและทำความเข้าใจหลักการพื้นฐานของ Task Library แล้ว แต่ฉันขาดการเชื่อมโยงอย่างชัดเจน ฉันเข้าใจว่าเป็นไปได้ที่จะเชื่อมโยงงานเพื่อให้พวกเขาเริ่มต้นหลังจากเสร็จสมบูรณ์ (ซึ่งเป็นสถานการณ์ที่ค่อนข้างมากสำหรับบทความทั้งหมดที่ฉันได้อ่าน) แต่ฉันต้องการให้งานทั้งหมดของฉันทำงานพร้อมกันและฉันอยากรู้อีกครั้ง เสร็จสิ้นทั้งหมด การใช้งานที่ง่ายที่สุดสำหรับสถานการณ์เช่นนี้คืออะไร

10
รองานหลายงานที่มีผลลัพธ์แตกต่างกัน
ฉันมี 3 งาน: private async Task&lt;Cat&gt; FeedCat() {} private async Task&lt;House&gt; SellHouse() {} private async Task&lt;Tesla&gt; BuyCar() {} พวกเขาทุกคนจำเป็นต้องเรียกใช้ก่อนที่รหัสของฉันจะสามารถดำเนินต่อไปและฉันต้องการผลลัพธ์จากแต่ละรายการเช่นกัน ไม่มีผลลัพธ์ใดที่เหมือนกันซึ่งกันและกัน ฉันจะโทรและรอให้งานทั้ง 3 เสร็จสมบูรณ์แล้วจึงได้ผลลัพธ์

12
วิธีการเรียก async แบบซิงโครนัส
ฉันมีasyncวิธี: public async Task&lt;string&gt; GenerateCodeAsync() { string code = await GenerateCodeService.GenerateCodeAsync(); return code; } ฉันต้องเรียกวิธีนี้จากวิธีการแบบซิงโครนัส ฉันจะทำสิ่งนี้ได้โดยไม่ต้องทำซ้ำGenerateCodeAsyncวิธีเพื่อให้สามารถทำงานพร้อมกันได้หรือไม่ ปรับปรุง ยังไม่พบวิธีแก้ไขที่สมเหตุสมผล อย่างไรก็ตามฉันเห็นว่าHttpClientใช้รูปแบบนี้แล้ว using (HttpClient client = new HttpClient()) { // async HttpResponseMessage responseAsync = await client.GetAsync(url); // sync HttpResponseMessage responseSync = client.GetAsync(url).Result; }

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