#concurrency 7 articles
A column called MyField0 appears — a throttled existence check or two web parts provisioning at once gotchas / rest-api POST /fields with a taken name succeeds with a numeric suffix; 429 read as "missing", a cached check or two concurrent web parts each make a twin — three-state check, single run per site, name check after the create Adding an attachment changes the item's ETag – the next MERGE with the old ETag fails with 412 gotchas / rest-api AttachmentFiles/add changes the item ETag; re-read before an IF-MATCH update Check-then-insert races produce duplicate rows — and "keep the lowest Id" dedup deletes the wrong one gotchas / rest-api GET-check then POST-insert without a unique column races into double inserts; dedup on read by version, never delete "lowest Id" Seed idempotency must key on the item, not the collection gotchas / lists A per-SET presence check re-inserts the whole block; SharePoint cannot enforce a unique set + value pair, and two app starts at the same moment still race – after inserting, re-read and delete your own copies that are… SharePoint REST has no increment — a "+1" computed from the count you read at page load loses every vote cast in between gotchas / rest-api A MERGE writes a value, so count + 1 from what the page loaded, sent with IF-MATCH: *, overwrites every vote cast since that page load; count distinct AuthorIds of per-user rows, or read fresh and write with the item's… The ETag key is @odata.etag in OData v4 – reading odata.etag silently turns IF-MATCH into * gotchas / rest-api SPHttpClient speaks OData v4: the item ETag comes as @odata.etag; reading odata.etag yields undefined and your IF-MATCH protection quietly disappears Two MERGEs to the same list item at once: the second one fails with 409 Save Conflict even with IF-MATCH: * – and a fire-and-forget write just disappears gotchas / rest-api IF-MATCH: * only switches off the ETag check (412); SharePoint still refuses a second save of the same item while the first is in flight with 409 Save Conflict. Queue writes per item (list#id), retry 409 briefly, never…