#26376 [Bug]: langfuse_otel callback drops OTEL spans under asyncio.gather() concurrency
### Check for existing issues
- [x] I have searched the existing issues and checked that my issue is not a duplicate.
### What happened?
When multiple `litellm.acompletion()` calls run concurrently via `asyncio.gather()`, the `langfuse_otel` callback consistently drops ~1 in 3 OTEL spans. The spans are silently lost — no errors, no warnings. This means Langfuse traces are incomplete and cost tracking is unreliable for batch LLM operations.
This is related to #25978 (which covers the teardown/drain variant), but this is the **concurrent execution** variant — spans are dropped while the event loop is still alive, not during shutdown.
### Root cause
LiteLLM dispatches success callbacks via `asyncio.create_task()` through `GLOBAL_LOGGING_WORKER`. When multiple `acompletion()` calls complete near-simultaneously under `asyncio.gather()`, the callback tasks that create OTEL spans (`_handle_success` → `_start_primary_span`) interfere with each other. The result: some spans are never created or are lost before reaching the `BatchSpanProcessor`.
### Steps to Reproduce
```python import asyncio import litellm from langfuse import observe, get_client
litellm.success_callback = ["langfu…