<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>DataRace on Abhishek Shukla</title><link>https://abhishekshukla.dev/tags/datarace/</link><description>Recent content in DataRace on Abhishek Shukla</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 12 Mar 2026 17:40:17 +0530</lastBuildDate><atom:link href="https://abhishekshukla.dev/tags/datarace/index.xml" rel="self" type="application/rss+xml"/><item><title>Swift Task Lifecycle Management - Structured vs Unstructured Concurrency</title><link>https://abhishekshukla.dev/blog/swift-task-life-cycle/</link><pubDate>Thu, 12 Mar 2026 17:40:17 +0530</pubDate><guid>https://abhishekshukla.dev/blog/swift-task-life-cycle/</guid><description>&lt;p&gt;Swift Concurrency fundamentally changed how asynchronous programming works in Swift. Before async/await arrived, developers relied heavily on completion handlers, delegates, Combine pipelines, and Grand Central Dispatch (GCD). These approaches worked, but they often made asynchronous code difficult to reason about, debug, and maintain.&lt;/p&gt;
&lt;p&gt;With Swift Concurrency, Apple introduced a model centered around &lt;strong&gt;tasks, structured concurrency&lt;/strong&gt;, and &lt;strong&gt;actor isolation&lt;/strong&gt;. One of the most important concepts to understand in this model is the difference between &lt;strong&gt;structured&lt;/strong&gt; and &lt;strong&gt;unstructured&lt;/strong&gt; concurrency.&lt;/p&gt;</description></item></channel></rss>